public decimal v1 {
get {
return this._v1;
}
set {
this._v1 = value ?? 0M; // also I tried, default(decimal)
}
}
错误信息说:
操作员 '??' 不能应用于“十进制”和“十进制”类型的操作数
为什么它不起作用,我应该如何使它起作用?
decimal
类型不能为 null,因此 null-coalesce 运算符在这里没有意义。刚设置_v1
为value
。
这些是值类型,null
您不能使用Nullable<decimal>
private decimal? _v1;
public decimal? V1
{
get
{
return this._v1;
}
set
{
this._v1 = value ?? 0M;
}
}
那就是空合并运算符。由于小数不能为空,它对小数没有用处。
如果需要此功能,可以使用decimal?
可以设置为 null 的 a:
public decimal? v1
{
get
{
return this._v1;
}
set
{
this._v1 = value ?? 0M;
}
}
如果您试图针对类的属性执行此操作,即:
public class TestCase {
public decimal TestProp {get;set;}
}
您可以像这样执行空合并:
var testCase = new TestCase();
return testCase?.TestProp ?? 0M
如果您认为默认十进制值 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;
}
}