//mDIco is a Dictionnary with string as keys and homemade class (cAsso) as values
IEnumerator iterdico = mDico.GetEnumerator();
iterdico.Reset();
while (iterdico.MoveNext())
{
var asso = iterdico.Current as cAsso;
if (asso != null)
{
//Code
}
}
我认为这会奏效,但显然不会。那我怎么做才能访问包含在我的字典值中的类?
答案 0 :(得分:8)
问题在于您依赖于非通用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
属性返回的序列。foreach
循环,而不是自己搞乱调查员。答案 1 :(得分:2)
foreach(KeyValuePair<string, cAsso> kvp in mDico)
{
// kvp.Key is string
// kvp.Value is cAsso
}
答案 2 :(得分:0)
foreach (var kvp in mDico)
{
var asso = kvp.Value;
...
}