c# - 为 POCO 属性生成属性选择器表达式
问题描述
我有一堂课:
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
现在我想生成一个列表:
List<Expression<Func<User, object>>> selectorExpressions = /* ... */
该列表应该包含与此示例 lambda 匹配的每个属性的选择器表达式:
user => user.Name;
user => user.Age;
/* etc... */
实现这一目标的最简单方法是什么?
编辑:澄清:我想为类中的每个属性生成这个列表,例如这样的:
List<Expression<Func<User, object>>> selectorExpressions = Util.GetSelectorsForEveryProperty<User>();
我不想为我需要的每个属性手动编写 lambda。
解决方案
您可以通过反射和动态表达式创建来做到这一点:
var selectorExpressions = new List<Expression<Func<User, object>>>();
foreach (var prop in typeof(User).GetProperties())
{
var arg = Expression.Parameter(typeof(User), "x");
var property = Expression.Property(arg, prop.Name);
var cast = Expression.Convert(property, typeof(object));
var expr = Expression.Lambda<Func<User, object>>(cast, arg);
selectorExpressions.Add(expr);
}
推荐阅读
- css - 如何使用 React 动态调整文本区域的高度?
- javascript - JavaScript-如何在不使用 charAt 方法的情况下返回该索引处的字符
- ruby-on-rails - Rails 维护策略何时更新?
- assembly - 一条 15 字节的指令如何从内存传输到 CPU?
- python - 如何获取文件夹中多个图像的轮廓
- encryption - 存储 Hyperledger Fabric 的 AES 加密密钥的解决方案推荐
- c++ - cmake 构建一个包含其所有依赖项的共享库
- ansible - Ansible 自定义角色(带有自定义命令模块)
- keycloak - 使用主领域的服务帐户创建领域和用户时出现 403 状态 - Keycloak
- css - 我无法将 SCSS 更改为 CSS