使用属性在.NET中引发异常

时间:2009-07-15 12:24:38

标签: c# .net silverlight

是否可以使用某种属性来抛出异常。这就是我的意思。而不是这样做:

public int Age
{
    get
    {
        return this.age;
    }

    set
    {
        this.age = value;
        NotifyPropertyChanged("Age");

        if (value < 18)
        {
            throw new Exception("age < 18");
        }

    }
}

做这样的事情:

[Range(18,100, ErrorMessage="Must be older than 18")]
public int Age
{
    get
    {
        return this.age;
    }

    set
    {
        this.age = value;
        NotifyPropertyChanged("Age");
    }
}

非常感谢任何帮助!

最诚挚的问候, 基里尔

3 个答案:

答案 0 :(得分:5)

您正在寻找一个AOP(面向方面​​编程)库,它可以非常轻松地完成这项工作。我建议试试PostSharp。主页上的示例应该说明如何在属性/方法上使用它。

答案 1 :(得分:1)

不,那是不可能的。您必须自己在setter中进行验证 - 就像NotifyPropertyChanged。

顺便说一句 - 这称为“面向方面编程”。

答案 2 :(得分:1)

正如公认的解决方案所说,直接做到这一点是不可能的,但可以通过使用像PostSharp这样的工具来实现。 只是添加到已经被告知的内容,我不建议从属性中抛出,或者在赋值时对此类进行验证,因为通常它不会保留太多的值并且可能是导致某些麻烦的原因。 这可能取决于场景。