Я хотел бы реализовать метод, который позволяет мне получить доступ к свойству неизвестного / анонимного объекта (-graph) с поздней привязкой / динамическим способом (я даже не знаю, как правильно его вызвать).
Вот пример того, чего я хотел бы достичь:
// setup an anonymous object
var a = new { B = new { C = new { I = 33 } } };
// now get the value of a.B.C.I in a late-bound way
var i = Get(a, "B.C.I");
А вот простая реализация с использованием «классического» отражения:
public static object Get(object obj, string expression)
{
foreach (var name in expression.Split('.'))
{
var property = obj.GetType().GetProperty(name);
obj = property.GetValue(obj, null);
}
return obj;
}
Какие другие вариантыу меня есть с C # / .NET 4, чтобы реализовать нечто подобное, как показано выше, но, возможно, проще, более производительным и т. д.?
Может быть, есть способы достичь того же, что позволило бы мне указать expression
используя лямбда-выражение вместо строки?Могут ли деревья выражений быть полезными в любом случае (например, как показано в в этом вопросе )?
Обновление : объект и выражение передаются в мой код через сетьсервисный звонок.Вот почему я использовал object
и string
в своем методе Get()
.