Еще одно решение, если вы обнаружите, что вы очень сильно набрасываете один и тот же объект, и вы не хотите, чтобы ваш код был помечен с помощью @SupressWarnings («unchecked»)
, было бы создать метод с аннотаций. Таким образом, вы централизируете литье и, надеюсь, уменьшаете вероятность ошибки.
@SuppressWarnings («unchecked») public static List & lt; String & gt; getFooStrings (Map & lt; String, List & lt; String & gt; ctx) {return (List & lt; String & gt;) ctx.get ("foos"); }
Вы должны передать экземпляр метода TEditDTO
в GetValue
, а не экземпляр типа.
var Id = prop.GetValue(editedDTO);
метод PropertyInfo.GetValue принимает в качестве первого аргумента экземпляр типа, для которого вы хотите прочитать значение. при использовании индексатора вам также необходимо указать дополнительный массив аргумента для GetValue. поскольку оба аргумента необходимы, вам необходимо передать значение null для второго при чтении нормального свойства. в вашем примере вы передаете экземпляр типа вместо экземпляра TEditDTO. используйте следующий код.
var Id = prop.GetValue(editedDTO, null);
Попробуйте это,
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);
}