public decimal v1 {
get {
return this._v1;
}
set {
this._v1 = value ?? 0M; // also I tried, default(decimal)
}
}
错误信息如下:
运算符“??”不能应用于类型为“decimal”的操作数和类型为“decimal”的操作数
为什么不起作用,我该怎么做才能让它起作用呢?
decimal
类型不能为null,因此空值合并运算符在这里没有意义。只需将_v1
设置为value
。
这些是值类型,不能为 null
,您可以使用 Nullable<decimal>
private decimal? _v1;
public decimal? V1
{
get
{
return this._v1;
}
set
{
this._v1 = value ?? 0M;
}
}
这是一个十进制数吗?还是一个小数?
“??”可以与十进制数一起使用,但无法与小数一起使用,因为小数永远不会为空。
这就是空值合并运算符。由于十进制数不能为null,因此它在十进制数中没有用处。
如果需要此功能,您可以使用decimal?
,它可以设置为null:
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
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;
}
}
null
。 - Nasreddine