【发布时间】:2010-11-30 20:30:43
【问题描述】:
在备注下,it 说
如果源的类型实现了 IList,则该实现用于获取指定索引处的元素。否则,此方法获取指定元素。
String 没有实现IList<T>。这是否意味着如果我声明类似,这将是一个O(n) 操作,
IEnumerable<char> myString = "stringy";
?
【问题讨论】:
-
这引出了一个有趣的问题:为什么
string没有实现IList<char>。 -
@CodeInChaos:我也想过这个问题,但我认为这是因为字符串是不可变的。不能有那些
Add和Remove方法。 -
@Ralph IList
有一个 IsReadOnly 属性。并且突变方法将被显式实现(因此它们不会出现在 string本身)并抛出NotSupportedException。我仍然认为 .net 中没有 Collection/List 的只读接口是一个设计错误。 -
@CodeInChaos:因为我没有字符串,所以我有一个
IEnumerable<char>,可能恰好是一个字符串。或者一个 List,或者一个数组,或者你有什么。 -
@Brian:你说的是显而易见的 :) 就像我说的,我不知道内部类型,我只知道我有一个 IEnumerable 可能恰好是一个字符串。是的,我可以在致电
ElementAt()之前手动检查它,但这是我不想在任何地方都采取的额外步骤。可以编写我自己的扩展程序......但是......你知道,当你因为标准中的一个小缺陷而不得不做这些小事情时,这很糟糕。
标签: c# linq string ienumerable