在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对象表达式可以用作语句

谁能解释一下正确的方法来乘和除数字,而不这样做在视图/控制器

在c#的Set Backing字段中乘以值

支持字段是独立于属性的成员。它通常被声明为私有的,与属性的类型相同,并且具有相同的名称,但使用驼形大小写或下划线:

private decimal someDecimal;

然后,您的属性被定义为读取和写入该字段。对于setter,可以使用关键字value来获取分配给属性的值:

public decimal SomeDecimal
{
    get
    {
        return this.someDecimal / 100;
    }
    set
    {
        this.someDecimal = value * 100;
    }
}

Edit:您对浮点运算精度损失的担忧可能不适用于这种情况。与floatdouble不同,decimal是以10为基数存储的。如果您对带有两个小数点的合理货币值执行简单的算术计算(例如求和),则不应该有任何准确性损失——该类型就是为此目的而设计的。

当你引用这个。SomeDecimal在SomeDecimal的getter和setter中创建了一个无限递归。

您需要创建一个私有字段来存储真实值,然后根据您的乘法/除法方案使用该属性来获取和设置它。

private decimal _someDecimal;
public decimal SomeDecimal
{
    get
    {
        return _someDecimal / 100;
    }
    set
    {
        _someDecimal = value * 100;
    }
}