我正在尝试创建一个具有DataSource的用户控件,该控件可以接受任何形式的集合,例如List<string>
或string[]
如果我检查is IEnumerable
,那么它需要一个类型,检查is IEnumerable<Type>
会返回false,is IEnumerable<object>
正确的方法是什么?我假设我将DataSource
属性设置为object
,然后检查setter是否有正确的类型?
答案 0 :(得分:1)
您可能希望DataSource
成为非通用IEnumerable
。任何IEnumerable<T>
也是IEnumerable
,它允许您枚举集合,而无需通用界面为您提供的强类型。
.NET 4.0引入了协方差,因此您可以将IEnumerable<Dog>
分配给IEnumerable<Animal>
类型的变量。但是,如果要允许数据源中的任何类型,则仍需要将DataSource设为IEnumerable<object>
。使用IEnumerable<object>
无效的IEnumerable
,您无法执行任何操作。