【问题标题】:How to validate values in property?如何验证属性中的值?
【发布时间】:2014-02-20 23:26:02
【问题描述】:

我有一个问题。我如何验证我的房产价格为正数,否则抛出一个新的异常。

我已经试过了,还是不行:

public decimal Price
{
    get
    {
        { return this.price; }
    }
    set
    {
        if (this.price < 0)
        {
            throw new ArgumentException("The price should be positive!");
        }
        else
        {
            this.price = value;
        }

    }
}

【问题讨论】:

  • 我的意思是,当我为价格值提供负数时,该属性不会捕获异常。
  • 用 if 语句中的 value 更改 this.price

标签: c# oop validation properties


【解决方案1】:

现在我明白了,您正在检查属性设置器中的支持字段,该字段具有最后一个值或默认值0(如果尚未初始化)。请改用value

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

【讨论】:

  • 即使这样,当我在 if 语句中用 value 更改价格时,仍然没有捕捉到它,我正在尝试使用 -225.25m 初始化 phone.price。
  • 只是为了确定,你是用Price还是price初始化 - 你能显示你的初始化代码吗
  • 您是在初始化this.price 还是this.Price
  • @user3248008:我已经用这个值对其进行了测试,它抛出了一个异常,所以我无法重现你的问题。请注意,我的支持字段是私有的,它应该始终是私有的。否则有可能绕过验证。
  • @user3248008:不要设置私有支持字段,而是使用属性。所以使用phone.Price 而不是phone.price。出于这个原因,我在支持字段之前添加了_,否则就不清楚这是一个属性还是一个字段。
【解决方案2】:

this.price 部分是当前值。您需要使用 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;
        }

    }
}

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多