如何检查Hashtable值是否都为0?

时间:2012-01-17 14:18:10

标签: c# hashtable cycle

这是我的代码:

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

我哪里错了?

3 个答案:

答案 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;
  }
}