c# - Lambda 表达式 C# 的属性名称

标签 c# lambda

如何在 C# 中将属性名称转换为 Lambda 表达式?

像这样:string prop = "Name"; 到 (p => p.Name)

public class Person{
    public string Name{ get; set; } 
}

谢谢!

最佳答案

使用表达式树,您可以生成 lambda 表达式。

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;
}

对于 Person 你可以这样调用它:

var exp = GetPropertySelector<Person>("Name");//exp: x=>x.Name

关于c# - Lambda 表达式 C# 的属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31948269/

相关文章:

c# - 如何从 Entity Framework Core 的导航集合属性中获取原始值?

java - 将 List<String> 中的分隔字符串转换为 List<String>

c++ - 使用模板调用运算符和通用 lambda 重载结构 - gcc vs clang

c# - 将字符串从 C# 传递到 c dll

c# - 用 2 个或更多扩展器 WPF 填充父级的剩余空间

c# - 在本地窗口中更改 T 类型 int

c# - 使用 google play games 检索玩家排名

Java 8 lambda 泛型接口(interface)方法

C# 如何解决 Func<T, bool> 中的逆变问题?

c++ - 创建模板内部 lambda 函数?