簡體   English   中英

從Lambda表達式獲取路徑

[英]Getting path from lambda expression

我有這樣的代碼:

string PropertyName<T>(Expression<Func<T>> expression)
{
    var body = expression.Body as MemberExpression;

    if (body == null)
    {
        body = ((UnaryExpression)expression.Body).Operand as MemberExpression;
    }

    return body.Member.Name;
}

我以這種方式使用它:

Console.WriteLine(PropertyName(() => this.Property));

在屏幕上打印Property

現在,我想更改它:

Console.WriteLine(PropertyName(() => this.OtherObject.Property));

會給我OtherObject.Property而不是Property 這有可能嗎?

目的是通過代碼創建對依賴屬性的綁定,而無需對屬性名稱進行硬編碼。

我也有一個問題,第5行的body何時等於null 我不經意地復制了此代碼,並保持原樣,但這種情況似乎永遠都不成立。

    string PropertyName<T>(Expression<Func<T>> expression)
    {
        var body = expression.Body as MemberExpression;

        if (body == null)
        {
            body = ((UnaryExpression)expression.Body).Operand as MemberExpression;
        }

        return string.Join(".", GetPropertyNames(body).Reverse());
    }

    private IEnumerable<string> GetPropertyNames(MemberExpression body)
    {
        while (body != null)
        {
            yield return body.Member.Name;
            var inner = body.Expression;
            switch (inner.NodeType)
            {
                case ExpressionType.MemberAccess:
                    body = inner as MemberExpression;
                    break;
                default:
                    body = null;
                    break;

            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM