我有一张带有一些可以考虑的双字段的表.使用LinqToSQL试图直接使用该字段我得到
参数类型System.Nullable不能分配给参数类型double
我该如何正确处理?
Nic*_*rey 21
这个问题与Linq无关.这double与double?/ 和/ 之间的转换有关Nullable<double>.
不允许隐式转换double?为double:
double? foo ;
double bar = foo ;
Run Code Online (Sandbox Code Playgroud)
您可以直接引用double值:
double? foo ;
double bar = foo.Value ;
Run Code Online (Sandbox Code Playgroud)
这将抛出一个NullReferenceExceptionif Nullable<T>为null(.HasValue即为false).
你可以施展它:
double? foo ;
double bar = (double) foo ;
Run Code Online (Sandbox Code Playgroud)
同样,如果Nullabl<T>为null ,您将获得异常.
如果为null,则可以使用null coalescing运算符指定默认值Nullable<T>:
double? foo ;
double bar = foo ?? -1.0 ;
Run Code Online (Sandbox Code Playgroud)
这个,natch,避免了NullReferenceException`问题.
您可以使用与零合并运算符相同的三元运算符:
double? foo ;
double bar = ( foo.HasValue ? foo.Value : -2 ) ;
Run Code Online (Sandbox Code Playgroud)最后,您可以使用常规条件逻辑来遵循替代路径:
double? foo ;
double bar ;
if ( foo.HasValue )
{
doSomething(foo.Value) ;
}
else
{
doSomething() ;
}
Run Code Online (Sandbox Code Playgroud)这些是关于选项.哪个是对的?不知道.取决于您的背景.
您可以使用
double value = theObject.TheProperty.GetValueOrDefault();
Run Code Online (Sandbox Code Playgroud)
如果你有一个Nullable<T>,你需要一个类型的值T.这会将any规范化null为默认值T,对于double,它将为0.0.如果你想要的东西其他比默认情况下,你可以解决它的另一种方式.
double value = theObject.TheProperty ?? 1d; // where 1 replaces any null
Run Code Online (Sandbox Code Playgroud)