if +可为空的类型(C#)的简写

时间:2020-03-05 18:58:58  来源:igfitidea点击:

以下返回

Type of conditional expression cannot be determined because there is no implicit conversion between 'double' and '<null>'
aNullableDouble = (double.TryParse(aString, out aDouble) ? aDouble : null)

我不能只使用aNullableBool而不是与aDouble进行往返的原因是,因为aNullableDouble是生成的EntityFramework类的属性,不能用作out par。

解决方案

回答

aNullableDouble = (double.TryParse(aString, out aDouble)?new Nullable<double>(aDouble):null)

回答

aNullableDouble = double.TryParse(aString, out aDouble) ? (double?)aDouble : null;

回答

只需将语法扩展为完整的语法,而不是简写形式...它将更易于阅读:

aNullableDouble = null;
if (double.TryParse(aString, out aDouble))
{
    aNullableDouble = aDouble;
}

回答

.NET支持可空类型,但是通过这样声明它们,我们必须对它们进行一些区别对待(例如,可以理解的是,现在通常是值类型的东西现在有点引用)。

如果最终不得不在可为空的双精度数和常规双精度数之间进行过多的转换,那么这可能也无济于事……就像自动生成的一组类可能很容易这样。

回答

使用可空类型的有趣的副作用是,我们不能真正使用速记IF。速记IF必须在两个条件下都返回相同的Type,并且在任何情况下都不能为null。因此,将其投射或者写出:)