限制属性接受的值范围的正确方法是什么?

Tom*_*ght 3 c# attributes design-time properties visual-studio

我有一些带有一些公共属性的用户控件.特定属性是整数,但只能接受小于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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做可以完成工作,但是会无声地失败.我想我可以添加逻辑以将0用于负值,将最大值用于超过它的那些,但它仍然不理想.

相比之下,UserControl如果我尝试在设计时(并且可能在运行时)设置负值,则TabValue属性(继承自)会抱怨.

如果这是通过正常例外实现的?或者,还有更好的方法?一个属性可能吗?

Oyb*_*bek 6

最佳方式是通过异常实现.继续你的代码

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

编辑

是的,Wiktor Zychla是绝对正确的!我纠正了答案.