【问题标题】:C#, Operator '??' cannot be applied to operands of type 'decimal' and 'decimal'C#,运算符 '??'不能应用于“十进制”和“十进制”类型的操作数
【发布时间】:2012-09-18 15:01:01
【问题描述】:
public decimal v1 {
  get {
    return this._v1; 
  }
  set {
    this._v1 = value ?? 0M;  // also I tried, default(decimal)
  }
}

错误信息说:

运算符'??'不能应用于“十进制”和“十进制”类型的操作数

为什么它不起作用,我应该如何使它起作用?

【问题讨论】:

  • 那些是值类型,不能是null
  • 啊哈!我明白了:)谢谢!

标签: c# asp.net


【解决方案1】:

decimal 类型不能为 null,因此 null-coalesce 运算符在这里没有意义。只需将_v1 设置为value

【讨论】:

  • 如果你有一个可以为空的小数怎么办?示例公共小数?总金额
  • 如果小数可以为空,那么合并将起作用,
【解决方案2】:

那些是值类型,不能是null,你可以使用Nullable<decimal>

private decimal? _v1;
public decimal? V1
{
    get
    {
        return this._v1;
    }
    set
    {
        this._v1 = value ?? 0M;
    }

}

【讨论】:

    【解决方案3】:

    是小数吗?或小数

    ??与小数一起使用?但不是小数,因为小数永远不能为空。

    http://msdn.microsoft.com/en-us/library/ms173224.aspx

    【讨论】:

      【解决方案4】:

      那是Null Coalescing Operator。由于decimal不能为null,所以与decimal没有用。

      您可以使用decimal?,如果您需要此功能,可以将其设置为 null:

      public decimal? v1 
      {
          get 
          {
              return this._v1; 
          }
          set 
          {
              this._v1 = value ?? 0M;
          }
      }
      

      【讨论】:

        【解决方案5】:

        如果您认为 默认十进制值 0 被视为 null、空或未设置,并且您希望仅在以下情况下使用 value它不是零,那么你可以这样做:

        decimal nextBest = 10M;
        
        public decimal v1 {
          get {
            return this._v1; 
          }
          set {
            // Use value by default (only if it's not 0), Otherwise use a different number.
            this._v1 = (value != 0)? value : nextBest;  
          }
        }
        

        【讨论】:

          【解决方案6】:

          如果您尝试针对 Ie 类的属性执行此操作:

          public class TestCase {
               public decimal TestProp {get;set;}
          }
          

          你可以像这样做一个空合并:

          var testCase = new TestCase();
          return testCase?.TestProp ?? 0M
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-17
            • 1970-01-01
            • 2018-06-29
            • 2019-04-29
            相关资源
            最近更新 更多