ValueCollection的“for循环”

时间:2009-07-08 22:02:58

标签: c#

有没有办法使用直接循环迭代ValueCollection? (不是foreach)

e.g。

Dictionary<string, List<long>>.ValueCollection somevalues = somecollection.Value.Values;

for(int i = 0; i< somevalues.Count; i++)
{
 //now what?
}

4 个答案:

答案 0 :(得分:7)

不 - ValueCollection没有索引器或类似内容。我想你可以使用:

for (int i = 0; i < someValues.Count; i++)
{
    var item = someValues.ElementAt(i);
    ...
}

但这会像狗一样表现:)(只是迭代会是O(n ^ 2),就像Schlemiel the Painter一样。)

你为什么要这样做?如果您想要带有元素的项目,只需保留一个计数器或使用overload of Select that passes in the index as well as the item

答案 1 :(得分:3)

你没有 在for循环中使用索引...

for (var en = somevalues.GetEnumerator(); en.MoveNext(); )
{
    var item = en.Current;
    // do something useful...
}

答案 2 :(得分:1)

没有开箱即用。某些集合没有索引运算符(myCollection[ someIndex ]

答案 3 :(得分:1)

你想要这个的最可能的原因是能够以其他方式使用该索引。只需坚持使用foreach循环,在循环之前将变量初始化为零,并在循环的底部将其递增。