C#中的简写if和可空类型

7
以下是返回结果:

以下返回

因为双精度和 <null> 之间不存在隐式转换,所以无法确定条件表达式的类型。

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

我不能直接使用aNullableBool,而要通过aDouble来往返转换的原因是aNullableDouble是一个由生成的EntityFramework类的属性,不能用作输出参数。

5个回答

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

7

将语法从简写形式扩展到完整形式,这样阅读起来会更容易:

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

2
使用可空类型的一个有趣的副作用是您不能真正使用简写IF。简写IF必须从两个条件返回相同的类型,并且在任何情况下都不能为null。因此,请进行强制转换或手动编写代码 :)

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

新的 Nullabled()?! 那不是双问号语法的作用吗?! - ljs
没错,那也可以。我的表述更明确,但两种形式都会生成相同的代码。 - James Curran

0

.NET支持可空类型,但是通过声明它们为可空类型,您必须稍微不同地处理它们(因为可以理解的是,通常是值类型的东西现在有点类似于引用)。

如果您最终需要在可空double和常规double之间进行太多转换,这也可能没有太大帮助...就像使用自动生成的一组类时可能很容易出现的情况一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接