通过反射在属性内获取当前属性信息

4
我将创建一个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;}

是否有办法在添加属性时获取这些值,还是我必须通过循环遍历类型中的所有属性并查看哪些属性已被分配给它们的属性才能实现?

提前致谢。


你可以在属性的构造函数中添加类型,然后通过调用4.5中的新泛型方法来检索它们。 - Gayot Fow
我希望它能够与 .Net 4.0 兼容。 - Toni Kostelac
@Garrry,你有快速示例吗? - Toto
是的,但他正在使用4.0版本,而我的东西是在4.5版本中,甚至无法在4.0版本中编译。 - Gayot Fow
一个4.5的答案对像我这样的人可能很有用;)事实上,我不明白你在谈论哪个“4.5中的新泛型方法”。 - Toto
@Toto,确实,但这可能会因为离题或未回答OP的问题而招致上级的批评。请开一个新的问题,并@我,我会为你提供一些4.5的内容。 - Gayot Fow
1个回答

1

除了迭代属性并检查属性之外,没有其他方法。 但是您应该能够在一个Linq语句中完成此操作。

在类型的GetProperties方法上使用GetCustomAttributes

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接