我对尝试处理可能的InvalidOperationException的最佳方式感到困惑。
在我的代码中,我在(decimal)data.CurrencyExchangeRate
下面得到一条蓝线,因此将代码更改为:
data.CurrencyExchangeRate.GetValueOrDefault()
删除蓝线。
由于数据来自数据库且列是小数,因此它永远不会为空。
处理可能的错误的最佳方法是GetValueOrDefault
吗?
我只是不确定如何处理它。
由于
答案 0 :(得分:1)
您仍然应该使用try/catch
。永远不要假设数据库中的数据始终有效。例如,如果我将数据库中的数据类型更改为VARCHAR
并添加了null
值,那么应用程序将崩溃。因此处理异常是有意义的。
try {
var value = data.CurrencyExchangeRate.GetValueOrDefault();
} catch (InvalidOperationException e) {
// Log the exception
}
答案 1 :(得分:1)
假设CurrencyExchangeRate
是可以为空的十进制,GetValueOrDefault
扩展方法是您最安全的选择 - 如果您希望在值为null时使用默认值零。< / p>
对于其他默认值,例如1,请使用以下内容:
decimal val = data.CurrencyExchangeRate.HasValue
? data.CurrencyExchangeRate.Value
: 1M;
您将从GetValueOrDefault
中捕获的唯一例外是来自系统,例如OutOfMemoryExceptions等。因此,您不太可能在此处收到错误。