例如。
[NoZero()]
public int Quantity{ get; set; }
基本上,我不希望将“数量”设置为小于零。
答案 0 :(得分:1)
这不会直接回答您的问题,而是提供一个有趣的替代方法。
如果您使用的是IoC框架,并且该框架具有“拦截”的可能性,则可以强制拦截您的属性访问权限(只要该类通过IoC正常传递)。
Ninject Intercept any method with certain attribute?
我还没有尝试过使用财产访问权,但是从理论上讲它可以工作。
或者,或者直接使用代码编织库:https://github.com/Fody/Fody可以有效地将自身编织到IL中。
答案 1 :(得分:0)
传统方式是
protected int _quantity;
public int Quantity
{
set
{
if (_quantity < 0) throw new ArgumentOutOfRangeException("Some message");
_quantity = value;
}
get
{
return _quantity;
}
}
除非在设置属性之前编写用于检查属性的代码,否则您无法真正使用属性。例如,DataAnnotation attributes就是这样工作的。在文档中,注意以下几点:
要实现上述要求,我们需要在UI层中进行编码,以适应/验证上述条件。
因此,您必须编写许多复杂的代码,并且要注意不要直接设置该属性。这就是为什么大多数人不使用属性的原因。