在.NET中如何动态评估对象的复杂表达式?

时间:2012-03-02 09:54:20

标签: .net reflection dynamic

在C#中,想象我有以下对象:

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

如何针对该对象动态评估以下表达式? (表达式是一个字符串

"Val[1].ArrVal"

在这种情况下,我希望表达式返回“three2”。我想写一个带有以下签名的方法:

object GetValue(string expression, object objectToExtractValueFrom)

我可以使用反射进行此操作,还是以某种方式使用动态关键字?

2 个答案:

答案 0 :(得分:2)

您无法使用反射或动态关键字来执行此操作。你能做的是:

  1. 解析字符串以创建一个lambda表达式树 将根据您的参数编译和执行
  2. 使用CodeDOM
  3. 使用一些动态语言,如IronRuby或IronPython

答案 1 :(得分:0)

  1. 添加Spring.Core NuGet包
  2. 使用ExpressionEvaluator类(请参阅http://www.springframework.net/doc/reference/html/expressions.html
  3. 示例:

    ExpressionEvaluator.GetValue("Test", "Length.ToString().Length");
    ExpressionEvaluator.GetValue(null, "DateTime.Now")