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

本文关键字:范围 方法 是什么 属性 | 更新日期: 2023-09-27 18:22:23

我有一个带有一些公共属性的用户控件。特定属性是整数,但只能接受小于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继承)会抱怨。

如果这是一个正常的例外?或者有更好的方法吗?也许是属性?

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

最理想的方法是通过异常来实现。只需继续您的代码

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

编辑

是的,维克托·齐奇拉是绝对正确的!我更正了答案。

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