[英]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.