Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可能的invalidoperationexception正确的处理方法_C#_.net_C# 4.0 - Fatal编程技术网

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。