English 中文(简体)
IE numberable<T> vs T[]
原标题:IEnumerable<T> vs T[]

我刚刚认识到,在我的意见中,也许我错过了把<条码>[引到我的意见中,而不是在<条码>上。 IEvidable<T>。

通常情况下,对于此类法典:

foreach (var item in items) {}

。 应T[ ]IE amountable<T>?

Than,如果我需要拿到这些物品,Array.Count将比更快。 IEvidable<T>.Count(?

最佳回答

<代码>可计算和提炼;T>通常为此处的更好选择,原因包括其他地方。 然而,我要谈谈。 当他说这种类型本身实施<编码>Count()时,则不正确。 它作为推广方法实际应用在<编码>电子数字>上,这意味着其他类型则不能凌驾于它之上,以提供更有效的执行。

否则,Count()就必须按整个顺序排列,以计算这些物项。 然而,does 了解<代码>ICollection<T>和ICollection,并选择适用于这些情况。 (In NET 3.5 IIRC, 它只选择了 ICollection<T>。 现在阵列does执行,因此E amountable.Count() 推迟到ICollection<T>Count,避免整个序列发生重叠。 由于<代码>Count(<><>>/code>必须发现其实施ICollection<T>,以开始,但至少仍在O(1)。

总体业绩情况也是如此:在跨越一个阵列而不是总顺序时,《联合投资法》的编码可能较为紧张。 基本上,你向联合投资公司提供更多信息,甚至C#汇编者自己也以不同方式处理阵列(直接使用索引员)。

然而,这些业绩上的差别对于 多数<>><>>>申请来说将是不相符合的,在我有良好理由之前,我肯定会与较一般性的接口接触。

问题回答

它有部分不一致之处,但标准理论将决定“对接口的预测,而不是执行”。 有了接口模型,只要用户与同一接口一致,就可以改变所采用的实际数据类型,而不会影响用户。

与此形成对照的是,你可能有理由具体地揭露一个阵列,在这种情况下,你想要表达这一点。

例如,我想IEvidable<T>是可取的。 值得注意的是,为了使用接口进行测试,如果你有特殊班级,你会减少头痛,那么,如果你需要重新计算所有时间,则收集的收件一般都是坏的,但有一个接口合同,你很容易 mo。

Added for edit:
This is more inconsequential because the underlying datatype is what will implement the Count() method, for an array it should access the known length, I would not worry about any perceived overhead of the method. See Jon Skeet s answer for an explanation of the Count() implementation.

T[](一个大小,零基)还执行<条码> 散射和提炼;T>和 IList<T> with <条形状> 可计算和提炼;T>。

因此,如果你想要在申请中进行较少的政变,那么最好采用<条码>。 除非您希望在foreach内实现指数化。

由于Array语系安装了System.Collections。 Generic.IList<T>, System。 收集。 通用课程:可计数的和;T>通用接口,除非您需要使用这些接口,否则我将使用电子数据。

如果所有观点都关注或应当注意,你们的感觉是正确的,那就是,它应当在其界面中要求所有的观点。

什么是从外部(通常)合乎逻辑的?

如果它有一个阵列,那么它就会回到阵列。 如果唯一的点是列举,那么就归还了E数字。 否则,独立党或独立党可能是前进的道路。

如果你希望提供许多功能,但不允许加以修改,那么,或许在内部使用清单,并将读写者从中回归。

鉴于稍后将法典从一个阵列改为一个可计算数字的阵列是一件容易的事,但另一种方式不是这样,因此,如果你知道需要一个小的回归线,我会拿一个数字。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...