我正在尝试枚举一个哈希表,定义为:
private Hashtable keyPairs = new Hashtable();
foreach(SectionPair s in keyPairs)
{
if(s.Section == incomingSectionNameVariable)
{
bExists = true;
break;
}
}
// more stuff here
Run Code Online (Sandbox Code Playgroud)
但我从Visual Studio 2013收到错误,"InvalidCastException未处理".尽管使用字典,但我很想知道为什么我会收到此错误.
Wil*_*sem 10
正如您可以在类的" 备注"部分中阅读的那样Hashtable,您枚举的对象是DictionaryEntrys.因此,您必须将其重写为:
foreach(DictionaryEntry s in keyPairs) {
//Is Section the Key?
if(s.Key == incomingSectionNameVariable) {
bExists = true;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
A DictionaryEntry有一个Key和Value元素(当然是键和值中的值Hashtable.两者都是Objects,因为a Hashtable不是通用的,因此编译器无法知道Key和/或是什么类型Value.
我建议你却使用Dictionary<TKey,TValue>,因为在这里你可以指定的类型Key和Value.在这种情况下,示例可能如下所示:
private Dictionary<string,int> keyPairs = new Dictionary<string,int>();
foreach( KeyValuePair<string,int> kvp in keyPairs) {
//do something with kvp
}
Run Code Online (Sandbox Code Playgroud)
但是这kvp.Key将是一个string所以你不必投射它,它使用更安全.