这是我的代码:
Hashtable actualValues = new Hashtable();
actualValues.Add("Field1", Int32.Parse(field1.Value));
actualValues.Add("Field2", Int32.Parse(field2.Value));
actualValues.Add("Field3", Int32.Parse(field3.Value));
bool isAllZero = true;
foreach (int actualValue in actualValues)
{
if (actualValue > 1)
isAllZero = false;
}
if (isAllZero)
{
}
但我在第6行遇到此异常System.InvalidCastException: Specified cast is not valid.
,接近foreach
。
我哪里错了?
答案 0 :(得分:5)
假设您可以使用Linq
bool isAllZero = Hashtable.Cast<DictionaryEntry>().All(pair => (int)pair.Value == 0);
如果您将HashTable
替换为Dictionary<string, int>
,则会变为
bool isAllZero = dictionary.All(pair => pair.Value == 0);
答案 1 :(得分:3)
当您遍历哈希表时,您会得到DictionaryEntry
,而不是int
。
foreach (DictionaryEntry entry in actualValues)
{
if (((int)entry.Value) > 1)
isAllZero = false;
}
答案 2 :(得分:3)
Hashtable返回返回类型为IDictionaryEnumerator
的IEnumerator,MoveNext方法返回的元素类型为DictionaryEntry
,而不是int - 您的foreach循环无效。
尝试以下方法:
bool isAllZero = actualValues.Values.Cast<int>().All(v => v == 0);
或没有Linq:
bool isAllZero = true;
foreach (int actualValue in actualValues.Values)
{
if (actualValue != 0)
{
isAllZero = false;
break;
}
}