.net - 使用lambda而不是字符串属性名称选择模型属性

标签 .net linq generics lambda

我正在建立一种类型的属性列表,以包含在该类型的集合的导出中。我想在不使用字符串作为属性名称的情况下执行此操作。列表中仅包括该类型的某些属性。我想做类似的事情:

exportPropertyList<JobCard>.Add(jc => jc.CompletionDate, "Date of Completion");

我该如何实现这种通用的Add方法?顺便说一句,字符串是属性的描述。

最佳答案

您可以通过检查传入的表达式来获取PropertyInfo对象。类似:

public void Add<T>(Expression<Func<T,object>> expression, string displayName)
{
    var memberExpression = expression.Body as MemberExpression;
    PropertyInfo prop = memberExpression.Member as PropertyInfo;
    // Add property here to some collection, etc ? 
}

这是一个不完整的实现,因为我不知道您到底想对属性执行什么操作-但它确实显示了如何从表达式中获取PropertyInfo-PropertyInfo对象包含有关该属性的所有元数据。另外,请确保在上面的代码中添加错误处理,然后再将其应用到生产代码中(即,防止表达式不是MemberExpression等)。

关于.net - 使用lambda而不是字符串属性名称选择模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3558974/

相关文章:

c# - LINQ 中的 `from..where` 或 `FirstOrDefault`

c# - 比较两个 Dictionary<T> 是否相等的最佳方法

.net - 允许 .NET 2.0 运行时以完全信任的方式从网络运行可执行文件

c# - .NET CompactFramework TextBox.selectAll on gotFocus

.net - 在 IIS7 上部署 .net Web 服务时出现错误 403.14?

c# - WCF 数据服务 : add two new objects to the database with links between them

c# - LINQ(到对象),在同一个 IEnumerable 上运行多个查询?

c# - 对象引用未设置到对象模型 fk 和虚拟字段的实例

haskell - 可输入 Maybe 和 Either

c# - 从动态类型创建泛型类的实例