11
public decimal v1 {
  get {
    return this._v1; 
  }
  set {
    this._v1 = value ?? 0M;  // also I tried, default(decimal)
  }
}

错误信息说:

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

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

4

6 回答 6

17

decimal类型不能为 null,因此 null-coalesce 运算符在这里没有意义。刚设置_v1value

于 2012-09-18T15:02:42.390 回答
5

这些是值类型,null您不能使用Nullable<decimal>

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

}
于 2012-09-18T15:02:54.137 回答
3

是小数吗?或小数

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

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

于 2012-09-18T15:03:01.970 回答
1

那就是空合并运算符。由于小数不能为空,它对小数没有用处。

如果需要此功能,可以使用decimal?可以设置为 null 的 a:

public decimal? v1 
{
    get 
    {
        return this._v1; 
    }
    set 
    {
        this._v1 = value ?? 0M;
    }
}
于 2012-09-18T15:03:11.767 回答
0

如果您试图针对类的属性执行此操作,即:

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

您可以像这样执行空合并:

var testCase = new TestCase();
return testCase?.TestProp ?? 0M
于 2021-11-22T14:46:49.873 回答
0

如果您认为默认十进制值 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;  
  }
}
于 2020-01-06T22:02:16.353 回答