如何让这个匿名函数将“object.Property”作为字符串返回?
() => object.Property;
谢谢!
答案 0 :(得分:3)
编辑以下要求说明:
var foo = GetYourObjectFromSomewhere();
string bar = ExprToString(() => foo.Property); // bar = "foo.Property"
// ...
public static string ExprToString<T>(Expression<Func<T>> e)
{
// use a stack and a loop so that we can cope with nested properties
// for example, "() => foo.First.Second.Third.Fourth.Property" etc
Stack<string> stack = new Stack<string>();
MemberExpression me = e.Body as MemberExpression;
while (me != null)
{
stack.Push(me.Member.Name);
me = me.Expression as MemberExpression;
}
return string.Join(".", stack.ToArray());
}
原始回答:
<击>
目前还不完全清楚你需要什么,或者object.Property
的类型是什么。也许下列之一可以做到这一点?
// either
() => (string)object.Property
// or
() => object.Property.ToString()
击> <击> 撞击>
答案 1 :(得分:2)
根据您的其他说明和要求,您可以通过要求Expression<Func<T, TProperty>>
的{{1}}安装来解决此问题。
你可以实现这样的事情:
Func<T, TProperty>
这可以让你像这样调用它:
public string GetPropertyName<T, TProperty>(Expression<Func<T, TProperty>> propertyPicker)
{
MemberExpression me = (MemberExpression)propertyPicker.Body;
return me.Member.Name;
}
因为存在从string name = GetPropertyName(x => x.Property);
到Func<T, TResult>
的隐式转换。
可以在Kzu's blog找到更完整的解释以及可重复使用的API。