我正在创建一种简单的方法来获取C# 中的表达式的Name
和。Value
但是,我发现了一个我无法弄清楚的案例。请看下面的代码:
public void GetValue_Object_TIn_Property_Test()
{
string val = "value";
var tuple = Tuple.Create(new object(), val);
Expression<Func<object, string>> expression = x => tuple.Item2;
Assert.AreEqual(val, expression.GetValue());
}
该.GetValue()
方法是我的扩展方法。
基本上,这个表达式树按顺序由 a LambdaExpression
、两个MemberExpression
s 和 a组成ConstantExpression
。
tuple.Item2
当我尝试memberExpression.Member.Name
从最后一个MemberExpression
. 这给了我“元组”而不是“Item2”。我怎样才能得到“Item2”呢?
此外,当我尝试获取表达式的值时,我得到整个元组而不是Item2
. 我正在使用以下方法来获取值:
public override bool TryGetValue(
MemberExpression memberExpression,
out T value
) {
value = default(T);
bool success = false;
var fieldInfo = memberExpression.Member as FieldInfo;
if (success = (fieldInfo != null))
{
var valueObj = fieldInfo.GetValue(expression.Value);
if (success = (valueObj is T || valueObj == null))
{
value = (T)valueObj;
}
}
return success;
}
在哪里MemberExpression
再是最后MemberExpression
。我在这里做错了什么? 我失踪的确切情况是什么?
先感谢您