通过Reflection inside属性获取有关当前属性的信息

时间:2013-07-19 09:16:26

标签: c# .net reflection custom-attributes system.reflection

我正在用C#创建自定义属性。

所以我有这样的事情:

[AttributeUsage(AttributeTargets.Property)]
public class Something : Attribute
{
   public Something
   {
       Assembly a = Assembly.GetCallingAssembly();
   }
}

上面的代码将为我提供调用属性的程序集的程序集名称。

我想知道的是,是否有办法获取添加了属性的属性的名称和类型。举个例子,如果我有:

// This should return System.Int32 and MyString
[Something]
public int MyInt {get; set;}

// This should return me System.String, and MyString
[Something]
public string MyString {get; set;}

在添加属性时是否有任何方法可以获取这些值,或者我是否必须通过类型中的所有属性来循环,并查看哪些属性已分配给它们?

提前致谢。

1 个答案:

答案 0 :(得分:1)

没有其他方法可以迭代属性并检查属性。 但你应该能够在一个Linq声明中做到这一点。

在类型的GetCustomAttributes方法上使用GetProperties

如果标记使用此属性的所有类都由接口,公共基类或类属性标记,则可以优化性能。所以你可以预取类而不是迭代所有类型。