我正在写一个当前有
的属性(它是一个ValidatorAttribute)[AttributeUsage(AttributeTargets.Property)]
它限制了可以放置属性的构造的类型。它可以应用于可能存在的任何属性。
我想知道是否有一个属性会限制可以应用该属性的属性的Type
。我想限制它在DateTime
属性上使用。
我可以看到几个选项,但它们并不理想:
Type
不正确,我可以抛出异常,但由于显而易见的原因,这只是一个坏主意。理想情况下,我会收到编译时错误,类似于我将此属性放在除属性之外的任何内容时:
属性对此无效 声明类型。它只对有效 'property,indexer'声明。
我不认为有这样的属性,但我很高兴出错。或者,是否有人写过这样的属性(甚至可能?),或任何建议的替代方案?
答案 0 :(得分:2)
强制执行此操作的唯一方法是编写一个后构建工具,该工具枚举程序集中的所有类型,并验证是否将其应用于正确的类型。这样做没有太大意义,如果应用错误,属性就不会产生任何影响,你只是找不到它。
答案 1 :(得分:0)
可以做@Hans Passant建议的工具之一是:http://www.postsharp.net/另一个选择是使用像Boo这样的语言,这是一种支持Abstract Syntax Tree的.NET运行时兼容语言操纵为part of the compile chain。这将允许创建一个将在编译时执行的宏,该宏将进行适当的类型检查。