C# で式のName
andを取得する簡単な方法を作成しています。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()
メソッドは私の拡張メソッドです。
基本的に、この式ツリーは、LambdaExpression
、2 つMemberExpression
の 、および の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
です。ここで何が間違っていますか? 私が見逃している正確なケースは何ですか?
前もって感謝します