0

我对尝试处理可能的 InvalidOperationException 的最佳方法感到困惑。

在我的代码中,我得到一条蓝线,(decimal)data.CurrencyExchangeRate因此将代码更改为:

data.CurrencyExchangeRate.GetValueOrDefault()删除蓝线。

由于数据来自数据库并且列是小数,因此它永远不会为空。

那么GetValueOrDefault处理可能的错误的最佳方法是什么?

我只是不确定如何最好地处理它。

谢谢

4

2 回答 2

1

您仍然应该使用try/catch. 永远不要假设数据库中的数据总是有效的。例如,如果我将数据库中的数据类型更改为 aVARCHAR并添加一个null值,您的应用程序将会崩溃。因此,处理异常是有意义的。

try {
    var value = data.CurrencyExchangeRate.GetValueOrDefault();
} catch (InvalidOperationException e) {
   // Log the exception
}
于 2013-06-27T09:59:36.637 回答
1

假设CurrencyExchangeRate是一个可为空的小数,GetValueOrDefault扩展方法是您最安全的选择 -如果您想在值为空时使用默认值零。

对于其他默认值,例如 1,请使用以下内容:

decimal val = data.CurrencyExchangeRate.HasValue 
    ? data.CurrencyExchangeRate.Value
    : 1M;

您将捕获的唯一异常将GetValueOrDefault来自系统,例如 OutOfMemoryExceptions 等。因此您不太可能在这里收到错误。

于 2013-06-27T10:08:48.087 回答