属性如果我有:.NET的房产
[SomeAttr]
public Int32 SomeProperty
{
get; set;
}
是否有可能为SomeAttr
告诉什么财产它上涨到?是否至少可以告诉Type
property
是什么?
属性如果我有:.NET的房产
[SomeAttr]
public Int32 SomeProperty
{
get; set;
}
是否有可能为SomeAttr
告诉什么财产它上涨到?是否至少可以告诉Type
property
是什么?
不,你不能。不直接。
你能做什么,你收集属性的那一刻,设置有额外的信息属性:
class SomeAttr: Attribute
{
public PropertyInfo Target {get;set;}
}
...当你收集到的信息:
Type type = ... // The type which holds the property.
PropertyInfo propertyInfo = typeo.GetProperty("SomeProperty");
Type propertyType = propertyInfo.PropertyType;
SomeAttr attr = propertyInfo.GetCustomAttributes(false).OfType<SomeAttr>().FirstOrDefault();
attr.Target = propertyInfo; // <== Set the target information.
这样,您随时可以在代码中的其他位置检索其目标成员:
public void DoSomethingWithAttribute(SomeAttr attr)
{
PropertyInfo whichProperty = attr.Target;
}
(您也可以使用基类MemberInfo
来支持方法,字段等)
不可以。您只能以相反方式进行操作。您可以查询属性(通过反射)它具有的属性:
Attribute.GetCustomAttributes(prop,true);
其中prop是从MemberInfo类派生的对象,该类描述属性SomeProperty。接下来你遍历返回的属性,看它是否包含你的属性。
你从哪里得到SomeAttr“list”?从一个类型,不是? –
你是什么意思? – Andrew
你想完成什么? –