在 C# 中设置支持字段中的值相乘
Multiply Value in Set Backing Field in C#
我希望在 C# 的 set
支持字段中乘以一个值(对于 ASP.NET MVC 应用程序)。我这样做是为了避免 issues with dividing floating point numbers,因此属性是整数,为了外观需要进行乘法和除法,然后存储为小数。
在 answer here 之后,我正在尝试使用支持字段在 属性 上完成这些操作,如下所示:
public decimal SomeDecimal
{
get
{
return this.SomeDecimal / 100;
}
set
{
this.SomeDecimal = this.SomeDecimal * 100;
}
}
我收到以下警告:
Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
任何人都可以解释在视图/控制器中不这样做的正确乘法和除法方法。
支持字段是独立于您的 属性 的成员。它通常被声明为私有的,与 属性 具有相同的类型,并且具有相同的名称,但采用驼峰式命名或带有下划线:
private decimal someDecimal;
然后,您的 属性 被定义为读取和写入该字段。在 setter 的情况下,您使用关键字 value
来获取分配给 属性 的值:
public decimal SomeDecimal
{
get
{
return this.someDecimal / 100;
}
set
{
this.someDecimal = value * 100;
}
}
编辑:您对浮点运算精度损失的担忧在这种情况下可能不适用。与 float
和 double
以 2 进制表示形式存储不同,decimal
以 10 进制表示存储。如果您执行简单的算术计算(例如求和)在合理的货币价值上有两个小数位——该类型就是为此目的而设计的。
当您在 getter 和 setter 中为 SomeDecimal 引用 this.SomeDecimal 时,您正在创建无限递归。
您想创建一个存储真实值的私有字段,然后使用 属性 获取并根据您的方案设置它 multiplying/dividing 它。
private decimal _someDecimal;
public decimal SomeDecimal
{
get
{
return _someDecimal / 100;
}
set
{
_someDecimal = value * 100;
}
}
我希望在 C# 的 set
支持字段中乘以一个值(对于 ASP.NET MVC 应用程序)。我这样做是为了避免 issues with dividing floating point numbers,因此属性是整数,为了外观需要进行乘法和除法,然后存储为小数。
在 answer here 之后,我正在尝试使用支持字段在 属性 上完成这些操作,如下所示:
public decimal SomeDecimal
{
get
{
return this.SomeDecimal / 100;
}
set
{
this.SomeDecimal = this.SomeDecimal * 100;
}
}
我收到以下警告:
Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
任何人都可以解释在视图/控制器中不这样做的正确乘法和除法方法。
支持字段是独立于您的 属性 的成员。它通常被声明为私有的,与 属性 具有相同的类型,并且具有相同的名称,但采用驼峰式命名或带有下划线:
private decimal someDecimal;
然后,您的 属性 被定义为读取和写入该字段。在 setter 的情况下,您使用关键字 value
来获取分配给 属性 的值:
public decimal SomeDecimal
{
get
{
return this.someDecimal / 100;
}
set
{
this.someDecimal = value * 100;
}
}
编辑:您对浮点运算精度损失的担忧在这种情况下可能不适用。与 float
和 double
以 2 进制表示形式存储不同,decimal
以 10 进制表示存储。如果您执行简单的算术计算(例如求和)在合理的货币价值上有两个小数位——该类型就是为此目的而设计的。
当您在 getter 和 setter 中为 SomeDecimal 引用 this.SomeDecimal 时,您正在创建无限递归。
您想创建一个存储真实值的私有字段,然后使用 属性 获取并根据您的方案设置它 multiplying/dividing 它。
private decimal _someDecimal;
public decimal SomeDecimal
{
get
{
return _someDecimal / 100;
}
set
{
_someDecimal = value * 100;
}
}