Я хочу получить доступ к объекту объекта, используя механизм связывания DLR.Вызов члена динамического объекта с именем, определенным во время выполнения в строке String
- Я не могу использовать собственный механизм привязки (
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();
}
Вещь, я работаю в предположении, что я не контролирую динамический объект, который я потребляю - это может быть любой объект, реализующий IDynamicMetaObjectProvider. –