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