我在做一个UserControl,任何人都可以插入一个List。
在内部,List被排序并以编程方式添加到内部ItemaSource的项目。
任何想要使用此UserControl的人都必须使用属性ElementsDataSource
public List<T> ElementsDataSource {get;set;}
List<T>
无效/正在编译,相反,我必须使用List<object>
。
但是当我在内部对它们进行排序并重用它们等时,我必须再次将ElementsDataSource中的对象转换为泛型类型...
如何像.NET一样为我的用户提供通用列表属性?
也许我的用户插入了List<Customer>
或List<Department>
等...或者我完全错了,应该使用List<Object>
?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果你不想让控制类通用(这是你的List<T>
解决方案),那么你应该尝试使用List<ISomeInterface>
所有与该控件一起使用的类实现吗?
答案 2 :(得分:0)
请注意,.NET使用IEnumerable或Object作为此类属性的类型。然后它使用反射来决定如何处理数据。
相反,您可以要求您的调用者进行任何排序或过滤,并为您提供准备好的IEnumerable。
如果您需要能够显示对象集合,并且集合必须在控件中进行排序,并且集合必须具有“自然”排序顺序,则该对象应实现IComparable<T>
接口。然后你可以通过重新发现这一点。您将要求该集合同时实现IEnumerable<T>
和IComparable<T>
,以便您可以对集合中的项目进行“自然”排序。