CSharp - 从自定义属性修饰属性获取值?

  显示原文与译文双语对照的内容
0 0

我已经编写了一个自定义属性,用于类的某些成员:


public class Dummy
{
 [MyAttribute]
 public string Foo { get; set; }

 [MyAttribute]
 public int Bar { get; set; }
}

我可以从类型中获取自定义属性并找到我的特定属性。 我无法确定的是如何获取指定属性的值。 当我拿假的一个实例并将其传递给( 作为对象) 我方法,我怎么能把我回来propertyinfo对象. GetProperties() 值分配给. Foo 和。酒吧?

编辑:

我的问题是我不知道如何正确地调用 GetValue 。


void TestMethod (object o)
{
 Type t = o.GetType();

 var props = t.GetProperties();
 foreach (var prop in props)
 {
 var propattr = prop.GetCustomAttributes(false);

 object attr = (from row in propattr where row.GetType() == typeof(MyAttribute) select row).First();
 if (attr == null)
 continue;

 MyAttribute myattr = (MyAttribute)attr;

 var value = prop.GetValue(prop, null);
 }
}

但是,当我这样做时,prop.GetValue 调用给我一个 TargetException - 对象与目标类型不匹配。 如何构造这里调用以获取这里值?

时间: 原作者:

0 0

你需要将对象本身传递给 GetValue,而不是属性对象:


var value = prop.GetValue(o, null);

还有一个更多的事情- 你应该不要使用。第一个( ),但是。firstordefault ( ),因为你的代码将引发异常,如果某些属性不包含任何属性:


object attr = (from row in propattr 
 where row.GetType() == typeof(MyAttribute) 
 select row)
. FirstOrDefault();

原作者:
0 0

使用 .GetProperties() 获取 PropertyInfo的array,并调用 PropertyInfo.GetValue 方法

用这种方式叫:


var value = prop.GetValue(o, null);

原作者:
...