在c#的Set Backing字段中乘以值
本文关键字:字段 Backing Set | 更新日期: 2023-09-27 18:09:15
我希望在c#的set
支持字段中乘以一个值(对于ASP。. NET MVC应用程序)。我这样做是为了避免浮点数的除法问题,因此属性是整数,需要为了外观而进行乘法和除法,然后存储为小数。
在这里的答案之后,我试图使用支持字段来完成这些对属性的操作,像这样:
public decimal SomeDecimal
{
get
{
return this.SomeDecimal / 100;
}
set
{
this.SomeDecimal = this.SomeDecimal * 100;
}
}
我得到以下警告:
只有赋值、call、increment、递减、await和new对象表达式可以用作语句
谁能解释一下正确的方法来乘和除数字,而不这样做在视图/控制器
支持字段是独立于属性的成员。它通常被声明为私有的,与属性的类型相同,并且具有相同的名称,但使用驼形大小写或下划线:
private decimal someDecimal;
然后,您的属性被定义为读取和写入该字段。对于setter,可以使用关键字value
来获取分配给属性的值:
public decimal SomeDecimal
{
get
{
return this.someDecimal / 100;
}
set
{
this.someDecimal = value * 100;
}
}
Edit:您对浮点运算精度损失的担忧可能不适用于这种情况。与float
和double
不同,decimal
是以10为基数存储的。如果您对带有两个小数点的合理货币值执行简单的算术计算(例如求和),则不应该有任何准确性损失——该类型就是为此目的而设计的。
当你引用这个。SomeDecimal在SomeDecimal的getter和setter中创建了一个无限递归。
您需要创建一个私有字段来存储真实值,然后根据您的乘法/除法方案使用该属性来获取和设置它。
private decimal _someDecimal;
public decimal SomeDecimal
{
get
{
return _someDecimal / 100;
}
set
{
_someDecimal = value * 100;
}
}