gpt4 book ai didi

c# - Expression> 作为对象初始化的属性?

转载 作者:太空狗 更新时间:2023-10-29 22:34:40 28 4
gpt4 key购买 nike

我的表达不是很好,我想改进它们,所以我想知道是否有人可以为我解释是否可以在类中创建一个属性,该属性可以在实例化过程中被赋予一个值,如下所示:

new Column<Product>{ ColumnProperty = p => p.Title};

或者更好(但我想我正在插入它)

new Column {ColumnProperty = p => p.Title};

类是这样的:

public class Column<TModel>
{
public Expression<Func<TModel, TProperty>> ColumnProperty { get; set; }
}

它背后的基本思想是我从一堆像这样的 Column 对象创建一个 Grid。

List<Product> productList = GetProductsFromDb();
List<Column> columnList = new List<Column>();

columnList.Add(new Column<Product> {ColumnProperty = p => p.ProductId, Heading = "Product Id"});
columnList.Add(new Column<Product> {ColumnProperty = p => p.Title, Heading = "Title"});

Grid myGrid = new Grid(productList, columnList);

这可能不是最简洁/最简单的方法,但我想知道它是否可以完成,因为我想提高我对表达式的理解,我喜欢能够使用强类型值而不是字符串文字一起工作好多了。

任何想法、想法、杂谈都将不胜感激

干杯罗布

最佳答案

当你定义类似 Func<TModel, TProperty> 的东西时这意味着有一个方法接受 TModel 类型并返回 TProperty 类型。所以像

这样的 lambda 表达式
p => p.ProductId 

返回属性的值而不是属性本身。

要使此语法起作用,您可以做的是定义您的 ColumnProperty如下:

public Expression<Func<TModel, object>> ColumnProperty { get; set; }

然后你可以从表达式树中提取详细信息。

关于c# - Expression<Func<TModel,TProperty>> 作为对象初始化的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4244669/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com