2 回答
TA贡献1804条经验 获得超8个赞
像你看起来是在寻找非通用版本的参数-无论是IList或IEnumerable将工作
public static T[] selectAll<T>(this IList list, string property){
...
}
TA贡献1812条经验 获得超5个赞
后果(哪里出了问题)
虽然我都输入了(using)
System.Collections.Generic
和
System.Collections.Specialized,
我不知道这些命名空间部分继承的类实际上在中System.Collections。我以为我要得到两半蛋糕,而我却得到两个馅而又没有外壳。
因此,例如,当我尝试使用IEnumerable时,我亲爱且可信赖的IDE(Visual Studio 2017)在没有Type指示器的情况下不会接受它。
对于通过Google遇到同样问题的任何人:
同时使用这两种方法.Generic并.Specialized不会覆盖您,集合类型的很多借鉴都来自父级System.Collections。
public static T[] selectAll<T>(this IList list, string property){
...
}
和
public static T[] selectAll<T>(this IEnnumerable list, string property){
...
}
可能会为您服务。
虽然,对于我上面概述的情况,
public static T[] selectAll<T>(this IEnumerable<object> list, string property){
...
}
效果也一样(而未IList<object>注册为扩展名List<?>
空间和概念的命名可能会引起误解:
我会认为IList<Type>是专门的(按类型)和IList泛型的(因为它适用于所有<Type>s)-但是在C#世界中,这是相反的:IList本身被认为是“非泛型的”-泛型的问题...内在性是从外部(在上下文中如何处理)而不是从内部(它包含(或可以包含)什么)来处理-像我这样的高级程序员可能会直觉上出错。
总之:
System.Collections包含的不仅是其类的总和
直观地将泛型集合称为非泛型集合,因为这样说的是较低级别的能力
System.Collections.IEnumerable
似乎适用于各种列表阅读官方文档通常很有用。(等等...一般还是专门?哦,谁知道了:P)
- 2 回答
- 0 关注
- 242 浏览
添加回答
举报