ex。
[NoZero()]
public int Quantity{ get; set; }
基本上,我不希望数量设置为小于零。
这不是直接回答您的问题,而是提供一个有趣的替代方案。
如果你正在使用IoC框架,并且该框架具有"拦截"的可能性,你可以强制拦截你的财产访问(只要该类是通过IoC传入的(。
Ninject拦截任何具有特定属性的方法?
我自己还没有尝试过房地产准入,但理论上它是可行的。
或者,直接使用代码编织库:https://github.com/Fody/Fody这有效地将自己编织到IL中。
传统的方法是
protected int _quantity;
public int Quantity
{
set
{
if (_quantity < 0) throw new ArgumentOutOfRangeException("Some message");
_quantity = value;
}
get
{
return _quantity;
}
}
除非在设置属性之前编写检查属性的代码,否则无法真正对属性执行此操作。例如,DataAnnotation属性就是这样工作的。在文档中,请注意以下内容:
要实现上述要求,我们需要在UI层中进行编码,以适应/验证上述标准。
因此,您必须编写大量复杂的代码,并注意不要直接设置属性。这就是为什么大多数人做这件事都不具备特质的原因。