示例:
[OnlyShowIfValueIsNonZero]
public int Foo { get; set; }
在OnlyShowIfValueIsNonZero
的代码中,我需要能够查询Foo
的值。这可能吗?如果是,怎么样?
答案 0 :(得分:3)
属性不知道它被分配给的成员,对于属性,只有通过反射访问它才会创建实例。你不能让一个属性直接与代码交互 - 虽然在编译时使用属性注入代码,但有一些像PostSharp这样的框架。
但是,您可以从反射提供分配给它的成员,并且由于您已经需要该成员访问其属性,您可以在该属性中创建一个接受该成员作为参数的方法。
答案 1 :(得分:1)
我认为你已经开始进入面向方面编程的世界了。许多AOP框架提供了可扩展性点来定义您自己的自定义方面 - 这是我认为适合您的。
PostSharp是一个非常流行的.NET AOP框架
答案 2 :(得分:0)
foreach (PropertyInfo propertyInfo in (typeof(T)).GetProperties()){
foreach (object attribute in propertyInfo.GetCustomAttributes(true))
{
if ( attribute is OnlyShowIfValueIsNonZero )
{
......
}
}
}