asp.net将匿名函数参数转换为字符串

时间:2010-01-06 11:06:07

标签: c#

如何让这个匿名函数将“object.Property”作为字符串返回?

() => object.Property;

谢谢!

2 个答案:

答案 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。