我试图找到一种方法来访问已在对象内属性级别应用的属性,但是我遇到了一堵砖墙。看来数据存储在类型级别,但我需要在属性级别。
以下是我尝试制作的一个例子:
public class MyClass
{
[MyAttribute("This is the first")]
MyField First;
[MyAttribute("This is the second")]
MyField Second;
}
public class MyField
{
public string GetAttributeValue()
{
// Note that I do *not* know what property I'm in, but this
// should return 'this is the first' or 'this is the second',
// Depending on the instance of Myfield that we're in.
return this.MyCustomAttribute.value;
}
}
答案 0 :(得分:0)
属性不是那样使用的。属性存储在包含属性的类对象中,而不是在类中声明的成员对象/字段。
由于您希望每个成员都是唯一的,因此感觉更像是应该是MyField
的成员数据,构造函数传入了这些内容。
如果您一直在使用属性,那么您可以在构造函数中添加代码,该代码在每个附加了属性的成员上使用反射,尝试将其实例数据设置为您想要的,但是需要确保所有MyField
个对象都已完全构建。
或者你可以让你的二传手看起来像这样:
private MyField _first;
[MyAttribute("This is the first")]
public MyField First {
get { return _first; }
set {
_first = value;
if (_first != null) {
_first.SomeAttribute = GetMyAttributeValue("First");
}
}
}
private string GetMyAttributeValue(string propName)
{
PropertyInfo pi = this.GetType().GetPropertyInfo(propName);
if (pi == null) return null;
Object[] attrs = pi.GetCustomAttributes(typeof(MyAttribute));
MyAttribute attr = attrs.Length > 0 ? attrs[0] as MyAttribute : null;
return attr != null ? attr.Value : null;
}