在.NET中,如何根据对象动态计算复杂表达式



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

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

如何根据对象动态评估以下表达式?(表达式是字符串

"Val[1].ArrVal"

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

object GetValue(string expression, object objectToExtractValueFrom)

我可以用反射来做这件事吗?或者用dynamic关键字来做?

您既不能使用反射也不能使用dynamic关键字。你能做的是:

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

相关内容

  • 没有找到相关文章

最新更新