可能的invalidoperationexception正确的处理方式

时间:2013-06-27 09:56:19

标签: c# .net c#-4.0

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

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

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

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

处理可能的错误的最佳方法是GetValueOrDefault吗?

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

由于

2 个答案:

答案 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等。因此,您不太可能在此处收到错误。