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

我想读取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 } 

但得到

对象与目标类型不匹配

您应该将TEditDTO的实例TEditDTOGetValue方法而不是类型实例。

 var Id = prop.GetValue(editedDTO); 

试试这个,

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

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

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

试试这个:

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