表达式<Func >作为对象初始化的属性?
我的表达不是很好,我想改进它们所以我想知道是否有人可以解释我是否有可能在类中创建一个属性,可以在实例化期间给出一个值,如下所示:
new Column{ ColumnProperty = p => p.Title};
或者更好(但我认为我在推动它)
new Column {ColumnProperty = p => p.Title};
有这样的类:
public class Column { public Expression<Func> ColumnProperty { get; set; } }
它背后的基本思想是我从一堆像这样的Column对象创建一个Grid。
List productList = GetProductsFromDb(); List columnList = new List(); columnList.Add(new Column {ColumnProperty = p => p.ProductId, Heading = "Product Id"}); columnList.Add(new Column {ColumnProperty = p => p.Title, Heading = "Title"}); Grid myGrid = new Grid(productList, columnList);
这可能不是最简单/最简单的方法,但我有兴趣知道它是否可以完成,因为我想提高我对表达式的理解,我喜欢能够使用强类型值而不是字符串文字它更好跟…共事。
任何想法,想法,ramblings将不胜感激
干杯罗布
当你定义像Func
这样的东西时Func
它意味着有一个方法采用TModel类型并返回TProperty类型。 所以lambda表达式就像
p => p.ProductId
返回属性的值而不是属性本身。
要使此语法有效,您ColumnProperty
按如下方式定义ColumnProperty
:
public Expression> ColumnProperty { get; set; }
然后,您可以从表达式树中提取详细信息。
好的,我只是有一个脑波,并将TProperty改为动态,我现在可以这样做,所以我想我回答了我自己的问题,但是会热衷于其他人对这种方法的优点/缺点的看法:
foreach(Product p in productList) { var value = column.ColumnProperty.Compile().Invoke(p); }
事实上
如果我改变我的财产
public Func ColumnProperty { get; set; }
我可以这样做:
上述就是C#学习教程:表达式<Func >作为对象初始化的属性?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
foreach(Product p in productList) { var value = column.ColumnProperty(p); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1014117.html