为什么只有静态/共享版本的ForEach用于数组?
本文关键字:ForEach 用于 数组 版本 共享 静态 为什么 | 更新日期: 2023-09-27 18:06:11
有人可以解释为什么只有一个静态/共享版本的ForEach数组?
IE: ForEach<T>(T array[], System.Action(Of T) action[])
我认为这与实现实例方法的类型推断要求有关,但是当你声明你的数组时,你提供类型对吗?
数组的一个问题是没有地方记录实例方法,这些方法只在"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