0

C# で式のNameandを取得する簡単な方法を作成しています。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.Item2memberExpression.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です。ここで何が間違っていますか? 私が見逃している正確なケースは何ですか?

前もって感謝します

4

1 に答える 1