问题是您依赖的非通用IEnumerator
接口不显示真实元素类型(其Current
属性的类型为object
)。使用通用接口(IEnumerator<T>
,它确实使元素类型很容易被发现),而且你会没事的。
当然,你不需要任何特殊的努力。 Dictionary<,>
类实现IEnumerable
接口明确。它的'隐式'GetEnumerator
方法返回一个强类型的枚举器(一个实现泛型接口的嵌套类型),这正是我们想要的。
因此,使用隐式打字方式并让编译器弄清楚是很好的。
// Actually a Dictionary<string, cAsso>.Enumerator
// which in turn is an IEnumerator<KeyValuePair<string, cAsso>>
using(var iterdico = mDico.GetEnumerator())
{
while (iterdico.MoveNext())
{
// var = KeyValuePair<string, cAsso>
var kvp = iterdico.Current;
// var = string
var key = kvp.Key;
// var = cAsso
var value = kvp.Value;
...
}
}
编辑:
其他一些外围要点:
- 一般情况下,你统计员的应该
Dispose
,通常与using
块。
- 不建议在统计员上使用
Reset
方法。事实上,在这种特殊情况下,它是无用的。
- 请注意,字典枚举器的元素类型是一个键值对,而不是值本身。如果您只对这些值感兴趣,请枚举字典的
Value
属性返回的序列。
- 正如Davide Piras指出的那样,在大多数情况下,您只需要一个正常的
foreach
循环而不是自己搞乱枚举器。
来源
2011-02-15 20:51:03
Ani
是Iterator势在必行?你可以用`foreach`循环很容易地做到这一点。 – 2011-02-15 20:49:49