在C#中,假设我有以下对象:
var myObject = new
{
Val = new[]
{
new { ArrVal = "three1"},
new { ArrVal = "three2"}
}
};
如何根据对象动态评估以下表达式?(表达式是字符串)
"Val[1].ArrVal"
在这种情况下,我希望表达式返回"three2"。我想写一个具有以下签名的方法:
object GetValue(string expression, object objectToExtractValueFrom)
我可以用反射来做这件事吗?或者用dynamic关键字来做?
您既不能使用反射也不能使用dynamic关键字。你能做的是:
- 解析字符串以创建一个lambda表达式树将根据您的参数进行编译和执行
- 使用CodeDOM
- 使用一些动态语言,如IronRuby或IronPython
- 添加Spring.Core NuGet包
- 使用ExpressionEvaluator类(请参阅http://www.springframework.net/doc/reference/html/expressions.html)
示例:
ExpressionEvaluator.GetValue("Test", "Length.ToString().Length");
ExpressionEvaluator.GetValue(null, "DateTime.Now")