PropertyInfo GetValue()对象与目标类型不匹配

时间:2014-07-10 09:03:49

标签: c# types

我想读取T型的值

  public virtual ActionResult Edit(TEditDTO editedDTO)
    {
        if (!ModelState.IsValid) return View(editedDTO);
        var t = editedDTO.GetType();
        var prop = t.GetProperty("Id") ;
        var Id = prop.GetValue(t); // get exception
     }

但是

  

对象与目标类型不匹配

4 个答案:

答案 0 :(得分:20)

您应该将TEditDTO的实例传递给GetValue方法,而不是类型实例。

var Id = prop.GetValue(editedDTO);

答案 1 :(得分:3)

试试这个,

var Id = prop.GetValue(editedDTO, null);

答案 2 :(得分:3)

PropertyInfo.GetValue方法接受您要为其读取值的类型的实例作为第一个参数。如果使用索引器,还需要为GetValue指定一个额外的数组参数。由于两个参数都是必需的,因此在读取普通属性时需要为第二个参数传递null。 在您的示例中,您传递的是Type实例而不是TEditDTO实例。使用下面的代码。

var Id = prop.GetValue(editedDTO, null);

答案 3 :(得分:2)

试试这个:

public virtual ActionResult Edit(TEditDTO editedDTO)
{
    if (!ModelState.IsValid) return View(editedDTO); 
    PropertyInfo prop = typeof(editedDTO).GetProperty("Id") ;
    Object Id = prop.GetValue(editedDTO); 
}