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;
        }
    }
}