有没有办法使用直接循环迭代ValueCollection? (不是foreach)
e.g。
Dictionary<string, List<long>>.ValueCollection somevalues = somecollection.Value.Values;
for(int i = 0; i< somevalues.Count; i++)
{
//now what?
}
答案 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循环,在循环之前将变量初始化为零,并在循环的底部将其递增。