【问题标题】:What is the correct way to limit the range of values a property will accept?限制属性接受的值范围的正确方法是什么?
【发布时间】:2012-02-04 13:03:58
【问题描述】:

我有一个带有一些公共属性的用户控件。特定属性是整数,但只能接受小于const 最大值的正值。目前我做以下事情:

private int markerwidth = 2;
[DefaultValue(2), Category("Appearance"), Description("Size of position marker")]
public int MarkerWidth
{
    get
    {
        return this.markerwidth;
    }
    set
    {
        if (value > 0 && value <= MAXMARKERWIDTH)
        {
            this.markerwidth = value;
        }
    }
}

这完成了工作,但默默地失败了。我想我可以添加逻辑以将 0 用于负值,将最大值用于超过它的值,但这仍然不理想。

相比之下,如果我尝试在设计时(可能是在运行时)设置负值,TabValue 属性(继承自 UserControl)会报错。

如果这是通过正常异常实现的?或者,还有更好的方法?也许是一个属性?

【问题讨论】:

    标签: c# visual-studio attributes properties design-time


    【解决方案1】:

    最优化的方式是通过异常来实现。继续你的代码

        if (value > 0 && value <= MAXMARKERWIDTH)
        {
            this.markerwidth = value;
        }
        else 
        {
            throw new ArgumentOutOfRangeException("Invalid value. Value must be between 0 and " + MAXMARKERWIDTH.ToString());
        }
    

    编辑

    是的,Wiktor Zychla 绝对正确!我更正了答案。

    【讨论】:

    • 谢谢你们俩。我接受了这个,因为它是更完整的答案。
    【解决方案2】:

    有一个内置的ArgumentOutOfRangeException,我想它适合这里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多