0

我希望set在 C# 的支持字段中乘以一个值(对于 ASP.NET MVC 应用程序)。我这样做是为了避免除法浮点数的问题,因此属性是整数,为了外观需要进行乘法和除法,然后存储为小数。

按照这里的答案,我正在尝试使用支持字段来完成对属性的这些操作,如下所示:

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

我收到以下警告:

只有 assignment、call、increment、decrement、await 和 new 对象表达式可以用作语句

任何人都可以解释在视图/控制器中不这样做的乘法和除法的正确方法。

4

2 回答 2

3

支持字段是与您的属性不同的成员。它通常被声明为私有的,与属性具有相同的类型,并且具有相同的名称,但使用驼峰式或下划线:

private decimal someDecimal;

然后,您的属性被定义为读取和写入该字段。在设置器的情况下,您使用关键字value来获取分配给属性的值:

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

编辑:您对浮点运算精度损失的担忧在这种情况下可能不适用。与存储为以 2 为基数的表示形式不同,float存储在以 10 为基数。如果您对具有两位小数的合理货币值(类型是为此目的而设计的。doubledecimal

于 2015-08-21T20:26:28.230 回答
2

当您在 SomeDecimal 的 getter 和 setter 中引用 this.SomeDecimal 时,您正在创建一个无限递归。

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

private decimal _someDecimal;
public decimal SomeDecimal
{
    get
    {
        return _someDecimal / 100;
    }
    set
    {
        _someDecimal = value * 100;
    }
}
于 2015-08-21T20:29:29.820 回答