如果此函数不调用,如何将值设置为lambda

时间:2018-06-13 08:52:04

标签: c# lambda properties

我的代码与此类似:

 public decimal Count { get; set; } 
 public decimal PriceWithoutVat { get; set; }
 public decimal AmountWithoutVat => Count * PriceWithoutVat;

但我希望AmountWithoutVat可以设置,以便:

  • 如果我没有设置AmountWithoutVat,则AmountWithoutVatCount * PriceWithoutVat

  • 如果我设置AmountWithoutVat,则会存储并使用新值。

2 个答案:

答案 0 :(得分:2)

嗯,你不能这样做(至少对于一个只有>语法的属性,因为它是只读的)

你可以添加一个可以为空的本地字段,如果它为null,则使用null-coalescing运算符返回其他内容:

private decimal? _ammountWithoutVat;

public decimal AmmountWithoutVat 
{ 
   get => _ammountWithoutVat ?? Count * PriceWithoutVat;
   set => _ammountWithoutVat = value;
}

P.S。

正如蒂姆施密特特别指出的那样: "属性集语句是C#7功能"

在旧版本的C#中,您可以使用:

public decimal AmmountWithoutVat 
{ 
    get { return _ammountWithoutVat ?? Count * PriceWithoutVat; }
    set { _ammountWithoutVat = value; }
}

答案 1 :(得分:0)

如果您不使用c#7,则可以执行此操作" old"方式:

private decimal? amountWithoutVat;
public decimal AmountWithoutVat
{
    get { return amountWithoutVat ?? Count * PriceWithoutVat; }
    set { amountWithoutVat = value; }
}