C#获取泛型对象的属性看看这段代码:foreach(TitemindataObjects){InlineUIContaineruiContainer=this.CreateElementContainer(item.FirstName??????)para.Inlines.Add(uiContainer);}FlowDocumentflowDoc=newFlowDocument(para);this.Document=flowDoc;在VisualStudio中编写“item.XXX”时,我应该从我的权限中获取属性,如.FirstName或.LastName。我不知道数据对象是IEnumerable还是IOrder等...它必须是通用的!如何获取真正的属性表单项?只有反射?Oded是对的,(对他或我而言)似乎没有任何意义去尝试使这种方法通用。您正在尝试概括一种方法,该方法的功能实际上特定于几种类型。现在,也就是说,似乎大部分功能与您要访问的这个属性无关。那么为什么不把它分成两部分:可以泛化的部分和不能部署的部分:像这样:voidBindElements(IEnumerabledataObjects,Funcselector){foreach(TitemindataObjects){//注意:通过将此方法的唯一特定于类型的方面//(属性)委托给(足够恰当地)委托,我们能够//将大部分代码打包成一个可重复使用的形式。var属性=选择器(项目);InlineUIContaineruiContainer=this.CreateElementContainer(property)para.Inlines.Add(uiContainer);}FlowDocumentflowDoc=newFlowDocument(para);this.Document=flowDoc;然后你处理特定类型的重载,例如IPerson,这段代码可以重用(我怀疑这可能是你所有代码重用的原因):publicvoidBindPeople(IEnumerablepeople){BindElements(people,p=>p.FirstName);}...然后是IOrder:publicvoidBindOrders(IEnumerableorders){BindElements(orders,o=>p.OrderNumber);}...ETC。如果向泛型类型添加约束(假设它必须实现IPerson接口),则可以使用接口上定义的任何方法:publicvoidBindElements(IEnumerabledataObjects)whereT:IPerson如果IPerson定义了FirstName和LastName属性,您可以将它们与T一起使用。请参阅链接以了解可能的不同类型的通用约束。除了Dan的回答之外,Func选择器只是说选择器是一种方法的标识符,该方法采用T类型的参数并返回TProperty。因此,可以作为第二个参数传递给BindElements的有效方法是,例如,stringCreatePersonElement(IPersonperson){returnstring.Format("{0}{1}",person.FirstName,person.LastName);在这种情况下,TProperty将是一个字符串,T将是IPerson。然后你可以像这样调用BindElementsBindElements(myPersonCollection,CreatePersonElement);其中myPersonCollection可以是您引用的列表。然后转到foreach循环foreach(TitemindataObjects){//注意:通过将此方法的唯一特定于类型的方面//(属性)委托给(足够恰当地)委托,我们能够//以可重用的形式打包大部分代码。var属性=选择器(项目);InlineUIContaineruiContainer=this.CreateElementContainer(property)para.Inlines.Add(uiContainer);属性设置为TProperty类型的对象,如果CreatePersonElement是字符串。如果字符串不适合您,只需将方法的返回类型更改为CreateElementContainer接受的任何参数。然后,您可以将这些方法之一作为您要支持的每种类型的BindElements(即ICustomer、IOrder)的第二个参数传递。我会阅读http://msdn.microsoft.com/en-us/library/d5x73970.aspx并再次考虑Oded的回答。以上就是C#学习教程:C#中从普通对象获取属性共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
