//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
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这会起作用,但显然它没有.那么我怎么做才能访问包含在我的词典值中的类?
问题是你依赖的是非泛型IEnumerator接口,它不会显示真正的元素类型(它的Current属性是类型object).使用通用接口(IEnumerator<T>确实可以轻松发现元素类型),你会没事的.
当然,您不需要为此付出任何特别的努力.在Dictionary<,>类实现IEnumerable接口明确.它的'implicit' 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;
...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
其他几个外围点:
Dispose使用枚举器,通常使用using块.Reset不建议在枚举器上使用该方法.事实上,在这种特殊情况下,它是无用的.Value属性返回的序列.foreach循环,而不是自己搞乱调查员.| 归档时间: |
|
| 查看次数: |
1246 次 |
| 最近记录: |