是否可以从已在该属性上实现的属性访问属性类型?
public class FooAttribute : Attribute
{
public string GetPropertyName()
{
// return ??
}
}
public class Bar
{
[FooAttribute]
public int Baz { get; set; }
}
我希望GetPropertyName()返回" Baz"。
答案 0 :(得分:1)
你所要求的是不可能的。因为属性和属性没有“一对一”关系。您可以将FooAttribute
应用于任意数量的属性,在这种情况下,您需要从GetPropertyName
方法返回哪个属性?
正如我在评论中所说,你可以循环遍历所有类型及其属性,看看哪些属性都有FooAttribute
,但显然这不是你想要的。
答案 1 :(得分:1)
Sriram Sakthivel是正确的,这是不可能的,但是如果你使用.net 4.5,你可以使用CallerMemberNameAttribute
创建一个变通方法,将调用者传递给属性的构造函数,存储它然后从你的GetPropertyName
方法:
public class FooAttribute : Attribute
{
public string PropertyName { get; set; }
public FooAttribute([CallerMemberName] string propertyName = null)
{
PropertyName = propertyName;
}
public string GetPropertyName()
{
return PropertyName;
}
}
这会将调用者(属性)传递给属性的构造函数。
MSDN上提供了有关CallerMemberNameAttribute
的更多详情。