Property Name to Lambda Expression C#

后端 未结 2 453
鱼传尺愫
鱼传尺愫 2021-01-04 14:21

How can I convert a property name to Lambda expression in C#?

Like this: string prop = \"Name\"; to (p => p.Name)

publi         


        
相关标签:
2条回答
  • 2021-01-04 14:42

    Using expression trees you can generate the lambda expression.

    using System.Linq.Expressions;
    public static Expression<Func<T, object>> GetPropertySelector<T>(string propertyName)
    {
        var arg = Expression.Parameter(typeof(T), "x");
        var property = Expression.Property(arg, propertyName);
        //return the property as object
        var conv = Expression.Convert(property, typeof(object));
        var exp = Expression.Lambda<Func<T, object>>(conv, new ParameterExpression[] { arg });
        return exp;
    }
    

    for Person you can call it like:

    var exp = GetPropertySelector<Person>("Name");//exp: x=>x.Name
    
    0 讨论(0)
  • 2021-01-04 14:45

    A lambda is just an anonymous function. You can store lambdas in delegates just like regular methods. I suggest you try making "Name" a property.

    public string Name { get { return p.Name; } }

    If you really want a lambda, use a delegate type such as Func.

    public Func<string> Name = () => p.Name;

    0 讨论(0)
提交回复
热议问题