В .NET, как динамически оценивать сложное выражение для объекта? - PullRequest
1 голос
/ 02 марта 2012

В C # представьте, что у меня есть следующий объект:

var myObject = new
{
    Val = new[]
    {
        new { ArrVal = "three1"},
        new { ArrVal = "three2"}
    }
};

Как бы я динамически оценил следующее выражение для объекта?( выражение является строкой )

"Val[1].ArrVal"

В этом случае я ожидаю, что выражение вернет "three2".Я хотел бы написать метод со следующей сигнатурой:

object GetValue(string expression, object objectToExtractValueFrom)

Могу ли я сделать это с помощью отражения или как-нибудь с помощью динамического ключевого слова?

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Вы не можете сделать это ни с отражением, ни с динамическим ключевым словом. Что вы можете сделать, это:

  1. разбирает строку, чтобы создать дерево лямбда-выражений, которое будет скомпилирован и выполнен в соответствии с вашими параметрами
  2. используйте CodeDOM
  3. используйте какой-нибудь динамический язык, например IronRuby или IronPython
0 голосов
/ 20 февраля 2015
  1. Добавить пакет Spring.Core NuGet
  2. Используйте класс ExpressionEvaluator (см. http://www.springframework.net/doc/reference/html/expressions.html)

Примеры:

ExpressionEvaluator.GetValue("Test", "Length.ToString().Length");
ExpressionEvaluator.GetValue(null, "DateTime.Now")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...