为什么只有一个静态/共享的foreach对数组版本?

可能有人请仁慈地解释为什么只有一个静态/共享的foreach对数组版本?

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

我认为这事做与执行实例方法的类型推断的要求,但在声明数组您提供类型吧?

--------------解决方案-------------

使用数组的一个问题是,有无处可记录的实例方法这是适用于“载体”。 “载体”是一种单维数组为0的基-所以任何表示为T[]在C#是一个矢量,但T[,]不是,例如。

这意味着并不是每一个实例Array应该有方法-即使它没有,你会如何表示T ? 每个数组类型是独立的,并有一个在.NET中没有泛型类型这是所有数组的基类。 所有我们得到的是Array

所以,我们既然已经在类型系统某处引入类型参数,并考虑到我们也把它限制为“载体”类型,一个静态方法似乎是一个合适的解决方法。

请注意这是如何这样List<T>我们已经拥有了类型参数,以便可以创建一个简单的实例方法。

这也是值得我们思考的时候使用约Array.ForEach实际上不仅仅是用干净的代码最终foreach循环。 我通常只使用它时,我已经得到了代表的每个元素上执行。 否则,语言构造清洁的感觉,它肯定在其无异常返回或中断循环能力更加灵活。

您提供的T可得知此阵列可以在里面包含的内容。 如此以来,数组实现IEnumerable,因此它得到它的ForEach扩展方法。

是否有任何其他的事情你找什么?

想知道如果埃里克斯后可以帮助您http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

分类:C# 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.510 (s). 10 q(s)