C# 可能的invalidoperationexception正确的处理方法
我不知道如何尝试和处理可能出现的残疾例外 在我的代码中,C# 可能的invalidoperationexception正确的处理方法,c#,.net,c#-4.0,C#,.net,C# 4.0,我不知道如何尝试和处理可能出现的残疾例外 在我的代码中,(十进制)data.CurrencyExchangeRate下面有一条蓝线,因此将代码更改为: data.CurrencyExchangeRate.GetValueOrDefault()删除蓝线 由于数据来自数据库,并且列是十进制的,所以它永远不会为null 那么GetValueOrDefault是处理可能的错误的最佳方法吗 我只是不知道如何最好地处理它 谢谢您仍然应该使用try/catch。永远不要假设数据库中的数据总是有效的。例如,如果
(十进制)data.CurrencyExchangeRate
下面有一条蓝线,因此将代码更改为:
data.CurrencyExchangeRate.GetValueOrDefault()
删除蓝线
由于数据来自数据库,并且列是十进制的,所以它永远不会为null
那么GetValueOrDefault
是处理可能的错误的最佳方法吗
我只是不知道如何最好地处理它
谢谢您仍然应该使用
try/catch
。永远不要假设数据库中的数据总是有效的。例如,如果我将数据库中的数据类型更改为VARCHAR
并添加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等。因此,在此处不太可能出现错误。data.CurrencyExchangeRate是否定义为十进制?
如果是,如何定义。如果这是Linq2Sql/Linq2Entities,您是否尝试过在设计器中设置not null选项?CurrencyExchangeRate
属性的数据类型是什么?如果您将数据类型更改为varchar,则ORM很可能会在您达到此程度之前中断。嗨,Darren,我已将代码包装在一个try-catch块中,对不起,我应该加上这个。我只是对处理这个问题的最佳方法感到困惑Hi Greg84,谢谢,所以我的方法和您展示的示例都会起作用。正确。你可以用你的方式,也可以用我的方式。尽管您只需要在需要与可空类型不同的默认值时使用my way。