Я хочу получить доступ к свойству объекта, используя механизм привязки DLR.
- Я не могу использовать собственный механизм привязки (ключевое слово
dynamic
в C #), потому что я не знаю имя свойства во время компиляции; - Я не могу использовать отражение, потому что оно извлекает только информацию о статическом типе;
- приведение к
IDictionary<string, object>
, насколько мне известно, решает только случай динамических классов, которые решают реализовать этот интерфейс (например,ExpandoObject
).
Вот демонстрационный код:
static void Main(string[] args)
{
dynamic obj = new System.Dynamic.ExpandoObject();
obj.Prop = "Value";
// C# dynamic binding.
Console.Out.WriteLine(obj.Prop);
// IDictionary<string, object>
Console.Out.WriteLine((obj as IDictionary<string, object>)["Prop"]);
// Attempt to use reflection.
PropertyInfo prop = obj.GetType().GetProperty("Prop");
Console.Out.WriteLine(prop.GetValue(obj, new object[] { }));
Console.In.ReadLine();
}