为什么只有静态/共享版本的ForEach用于数组?

本文关键字:ForEach 用于 数组 版本 共享 静态 为什么 | 更新日期: 2023-09-27 18:06:11

有人可以解释为什么只有一个静态/共享版本的ForEach数组?

IE: ForEach<T>(T array[], System.Action(Of T) action[])

我认为这与实现实例方法的类型推断要求有关,但是当你声明你的数组时,你提供类型对吗?

为什么只有静态/共享版本的ForEach用于数组?

数组的一个问题是没有地方记录实例方法,这些方法只在"vector "上可用。"向量"是一个以0为底的一维数组,所以任何在c#中可以表示为T[]的东西都是向量,但T[,]不是,例如。

这意味着不是每个Array的实例都应该有这个方法——即使它有,你如何表示T ?每个数组类型都是独立的,在。net中没有泛型类型作为所有数组的基类。我们只有Array

因此,假设我们必须在类型系统的某个地方引入类型参数,并且假设我们也将其限制为"向量"类型,静态方法似乎是一个合适的解决方案。

注意这是不是 List<T>的情况,我们已经有了类型参数,所以可以创建一个简单的实例方法。

同样值得考虑的是,使用Array.ForEach实际上比使用foreach循环更干净的代码。我通常会只在我已经得到一个委托来执行每个元素时使用它。否则,语言结构感觉更干净,并且在返回或跳出循环而没有异常的能力方面肯定更灵活。

您提供T来告诉数组中可以包含什么。因为Array实现了ienumerable,所以它得到了ForEach扩展方法。

您还需要什么别的东西吗?

想知道eric的帖子是否对您有所帮助http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx