GetProperty и GetValue - Reflection [duplicate]

Еще одно решение, если вы обнаружите, что вы очень сильно набрасываете один и тот же объект, и вы не хотите, чтобы ваш код был помечен с помощью @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");  }  
3
задан Mohammadreza 10 July 2014 в 10:03
поделиться

4 ответа

Вы должны передать экземпляр метода TEditDTO в GetValue, а не экземпляр типа.

var Id = prop.GetValue(editedDTO);
17
ответ дан Selman Genç 15 August 2018 в 15:07
поделиться
  • 1
    это создает ошибку компилятора, поскольку требуется второй аргумент. – flo_badea 10 July 2014 в 10:25
  • 2
    @flo_badea нет, нет. иначе код OP даже не компилируется – Selman Genç 10 July 2014 в 10:32
  • 3
    @flo_badea, единственный параметр, который работает только для .net 4.5, поэтому я выбрал два параметра для соображения обратной совместимости – Yuliam Chandra 10 July 2014 в 10:41
  • 4
    ты прав. я смотрел версию .NET4.0 – flo_badea 10 July 2014 в 10:55
  • 5
    Работает как чемпион. Спасибо за помощь. – Andy Evans 18 August 2015 в 17:20

метод PropertyInfo.GetValue принимает в качестве первого аргумента экземпляр типа, для которого вы хотите прочитать значение. при использовании индексатора вам также необходимо указать дополнительный массив аргумента для GetValue. поскольку оба аргумента необходимы, вам необходимо передать значение null для второго при чтении нормального свойства. в вашем примере вы передаете экземпляр типа вместо экземпляра TEditDTO. используйте следующий код.

var Id = prop.GetValue(editedDTO, null);
3
ответ дан flo_badea 15 August 2018 в 15:07
поделиться

Попробуйте это,

var Id = prop.GetValue(editedDTO, null);
3
ответ дан Yuliam Chandra 15 August 2018 в 15:07
поделиться
  • 1
    я сделал, не работает – Mohammadreza 10 July 2014 в 10:06
  • 2
    @Mohammadreza, такое же исключение? Какая ошибка с этим кодом? – Yuliam Chandra 10 July 2014 в 10:08

Попробуйте следующее:

public virtual ActionResult Edit(TEditDTO editedDTO)
{
    if (!ModelState.IsValid) return View(editedDTO); 
    PropertyInfo prop = typeof(editedDTO).GetProperty("Id") ;
    Object Id = prop.GetValue(editedDTO); 
}
2
ответ дан Yuliia Ashomok 15 August 2018 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: