C# 如何验证属性中的值?
我有个问题。我如何验证我的房产价格为正数,否则抛出一个新的异常 我已经试过了,但仍然不起作用:C# 如何验证属性中的值?,c#,oop,validation,properties,C#,Oop,Validation,Properties,我有个问题。我如何验证我的房产价格为正数,否则抛出一个新的异常 我已经试过了,但仍然不起作用: public decimal Price { get { { return this.price; } } set { if (this.price < 0) { throw new ArgumentException("The price should be positive!");
public decimal Price
{
get
{
{ return this.price; }
}
set
{
if (this.price < 0)
{
throw new ArgumentException("The price should be positive!");
}
else
{
this.price = value;
}
}
}
公共十进制价格
{
得到
{
{返回此.price;}
}
设置
{
如果(该价格<0)
{
抛出新的ArgumentException(“价格应该是正的!”);
}
其他的
{
价格=价值;
}
}
}
零件此价格为当前值。您需要使用value
变量检查在setter中传递的值
public decimal Price
{
get
{
{ return this.price; }
}
set
{
if (value < 0)
{
throw new ArgumentException("The price should be positive!");
}
else
{
this.price = value;
}
}
}
公共十进制价格
{
得到
{
{返回此.price;}
}
设置
{
如果(值<0)
{
抛出新的ArgumentException(“价格应该是正的!”);
}
其他的
{
价格=价值;
}
}
}
现在我明白了,您正在检查属性setter中的backing字段,该字段具有最后一个值或默认值0
(如果尚未初始化)。请使用以下选项:
私有十进制价格;
公共十进制价格
{
得到
{
{返回此.price;}
}
设置
{
如果(值<0)
{
抛出新的ArgumentException(“价格应该是正的!”);
}
其他的
{
价格=价值;
}
}
}
我的意思是,当我给price value指定一个负数时,属性没有捕捉到异常。用if语句中的值更改this.price。即使这样,当我用if语句中的值更改price时,仍然没有捕捉到异常,我尝试将phone.price初始化为-225.25m。只是为了确保,您是否使用Price
或Price
初始化-您是否可以显示您的初始化代码您是否正在初始化this.Price
或this.Price
?@user3248008:我已使用此值对其进行了测试,它引发异常,因此无法重现您的问题。请注意,我的支持字段是私有的,它应该始终是私有的。否则可以绕过验证。@user3248008:不要设置私有支持字段,而是使用属性。所以使用phone.Price
而不是phone.Price
。因此,我在backing字段前面加前缀\uuu
,否则就不清楚这是属性还是字段。
private decimal price;
public decimal Price
{
get
{
{ return this.price; }
}
set
{
if (value < 0)
{
throw new ArgumentException("The price should be positive!");
}
else
{
this.price = value;
}
}
}