Вызов члена динамического объекта с именем, определенным во время выполнения в строке

Я хочу получить доступ к свойству объекта, используя механизм привязки DLR.

  • Я не могу использовать собственный механизм привязки (ключевое слово dynamic в C #), потому что я не знаю имя свойства во время компиляции;
  • Я не могу использовать отражение, потому что оно извлекает только информацию статического типа;
  • приведение к IDictionary , насколько мне известно, решает только случай динамических классов, которые выбирают реализацию этого интерфейса (например, 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();
    }
8
задан Jean Hominal 27 June 2011 в 10:09
поделиться