【问题标题】:Shorthand if + nullable types (C#)if + 可空类型的简写 (C#)
【发布时间】:2010-09-10 03:57:18
【问题描述】:

以下返回

无法确定条件表达式的类型,因为'double'和''之间没有隐式转换

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

我不能只使用 aNullableBool 而不是与 aDouble 往返的原因是因为 aNullableDouble 是生成的 EntityFramework 类的属性,不能用作输出参数。

【问题讨论】:

    标签: c# conditional-operator


    【解决方案1】:
    aNullableDouble = double.TryParse(aString, out aDouble) ? (double?)aDouble : null;
    

    【讨论】:

      【解决方案2】:

      只需将语法改为完整的语法而不是简写...它会更容易阅读:

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

      【讨论】:

        【解决方案3】:

        使用可空类型的有趣副作用是您不能真正使用速记 IF。速记 IF 必须从两个条件返回相同的类型,并且在任何一种情况下都不能为空。所以,投射或写出来:)

        【讨论】:

          【解决方案4】:
          aNullableDouble = (double.TryParse(aString, out aDouble)?new Nullable<double>(aDouble):null)
          

          【讨论】:

          • 新的 Nullabled()?!这不就是双标吗?语法是 for?!
          • 是的,这也行。我的更明确,但两种形式都会生成相同的代码。
          【解决方案5】:

          .NET 支持nullable types,但是通过这样声明它们,您必须对它们进行一些不同的处理(因为,可以理解的是,现在通常是值类型的东西有点类似于引用)。

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

          【讨论】:

            猜你喜欢
            • 2014-09-22
            • 2021-01-26
            • 1970-01-01
            • 2019-10-22
            • 1970-01-01
            • 2021-02-17
            • 2010-12-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多