请有人能够解释为什么只有ForEach for static的静态/共享版本?
IE: ForEach<T>(T array[], System.Action(Of T) action[])
我认为这与实现实例方法的类型推断要求有关,但是当你声明你的数组时,你提供的类型是对的吗?
答案 0 :(得分:4)
数组的一个问题是,无法记录仅在“vectors”上可用的实例方法。 “向量”是一个基数为0的一维数组 - 因此在C#中可以表示为T[]
的任何东西都是向量,但例如T[,]
不是。
这意味着并非Array
的每个实例都应该拥有该方法 - 即使它确实如此,您将如何代表T
?每个数组类型都是独立的,.NET中没有泛型类型,它是所有数组的基类。我们得到的只是Array
。
因此,鉴于我们必须在类型系统中的某处引入类型参数,并且考虑到我们也将其限制为“向量”类型,静态方法似乎是一种合适的解决方法。
请注意List<T>
的情况不,我们已经有了type参数,因此可以创建一个简单的实例方法。
当使用Array.ForEach
实际上最终使用更简洁的代码而不仅仅使用foreach
循环时,也值得考虑。当我已经有一个委托来执行每个元素时,我通常只使用它。否则语言结构会感觉更清晰,并且它在返回或突破循环的能力方面肯定更灵活。
答案 1 :(得分:0)
您提供T来告诉数组可以包含的内容。因此,由于Array实现了可以相互作用,因此它获得了ForEach扩展方法。
你还有什么要找的吗?
想知道Erics帖子是否可以帮助你http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx