我有一个包含一些可为空的双字段的表。使用 LinqToSQL 尝试直接使用该字段我得到
Argument type System.Nullable is not assignable to parameter type double
我该如何正确处理这个问题?
最佳答案
问题与Linq无关。这与 double
之间的转换有关和 double?
/Nullable<double>
.
从 double?
隐式转换至 double
不允许:
double? foo ;
double bar = foo ;
可以直接引用double值:
double? foo ; double bar = foo.Value ;
这将抛出
NullReferenceException
如果Nullable<T>
为空(即.HasValue
为假)。你可以施放它:
double? foo ; double bar = (double) foo ;
同样,如果
Nullabl<T>
会出现异常为空。如果
Nullable<T>
可以使用 null 合并运算符分配默认值为空:double? foo ; double bar = foo ?? -1.0 ;
自然,这避免了 NullReferenceException` 问题。
您可以像使用空合并运算符一样使用三元运算符:
double? foo ; double bar = ( foo.HasValue ? foo.Value : -2 ) ;
最后,您可以使用常规条件逻辑来遵循替代路径:
double? foo ; double bar ; if ( foo.HasValue ) { doSomething(foo.Value) ; } else { doSomething() ; }
那些是关于选项的。哪个是正确的?我不知道。这取决于您的上下文。
关于c# - 如何正确处理 LinqToSql 类的 System.Nullable<T> 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6233117/