Если вы храните объект как тип object
, вам нужно использовать отражение. Это относится к любому типу объекта, анонимному или другому. На объект О, вы можете получить его тип:
Type t = o.GetType();
Тогда из этого вы смотрите свойство:
PropertyInfo p = t.GetProperty("Foo");
Тогда из этого можно получить значение:
object v = p.GetValue(o, null);
Этот ответ давно назрел для обновления для C# 4:
dynamic d = o;
object v = d.Foo;
А теперь еще одна альтернатива в C# 6:
object v = o?.GetType().GetProperty("Foo")?.GetValue(o, null);
Обратите внимание, что с помощью ?.
мы вызываем в результате v
быть в трех различных ситуациях null
!
o
является null
, так что нет ни одного объекта на всех
o
является не- null
, но не обладает свойством Foo
o
имеет свойство Foo
, но ее реальное значение случается null
.
Так что это не эквивалентно предыдущим примерам, но может иметь смысл, если вы хотите рассматривать все три случая одинаково.
Никогда не динамический, прежде чем до сих пор, хороший обновления для .NET 4.0 – Alan
woow, хорошо для C# 4 = D это работа для меня – ch2o
в решении C# 4 вы получите исключение во время выполнения, если свойство не существует ('object v = d.Foo'), а' GetValue (o, null) 'будет null, если не существует. – kobe