【问题标题】:hastable contains value condition did not works哈希表包含值条件不起作用
【发布时间】:2014-05-16 03:45:59
【问题描述】:

我创建了一个 SNMP 扫描器并将 SNMP 值存储在哈希表中,如下所示:

      SNMPObject[] s = new SNMPObject[4];
      s[0] = new SNMPObject("1.3.6.1.2.1.1.5.0");            // name
      s[1] = new SNMPObject("1.3.6.1.2.1.1.1.0");            // desc
      s[2] = new SNMPObject("1.3.6.1.2.1.1.6.0");            // location
      s[3] = new SNMPObject("1.3.6.1.2.1.43.10.2.1.4.1.1");  // count

      SNMPAgent snmpAg = new SNMPAgent(newAddress, "public", "public");
      Hashtable ht = snmpAg.getValues(s);

我在进程后面的线程中运行扫描。并检索哈希表值:

      if (InvokeRequired)
      {
         this.Invoke(new MethodInvoker(delegate
         {
            //load the hashtable to datagridview

            //Check if location value is empty. 
            if (!ht.ContainsValue(3))              //check condition did not working.
            {
               //do Set SNMP command
            }
            else
            {
               //do some other operation 
            }

         }));
      }

现在我希望条件检查位置是否不包含值。我想做 SET 操作。
但问题是我的 if (!ht.ContainsValue(3)) 条件不起作用。

即使ht.ContainsValue(3) 包含值,它仍然会执行设置操作。可以请教一下吗?

【问题讨论】:

    标签: c# hashtable


    【解决方案1】:

    你应该使用 ContainsKey,而不是 ContainsValue。

    如果可能的话,您还应该使用Dictionary<,> 而不是 HashTable。除非您的键和值属于同一类型(或者键类型可以隐式转换为值类型),否则该类不允许您犯此错误。

    如果键存在,但关联的值为空,那么你需要

    if (!ht.ContainsKey(3) || ht[3] == null)
    

    如果值是字符串而不是 SNMPObject 的实例,那么可能

    if (!ht.ContainsKey(3) || string.IsNullOrEmpty(ht[3] as string))
    

    【讨论】:

    • 我认为我不应该使用 ContainsKey,因为它们都有密钥。只是我需要检查值是否为空“”。我尝试过使用 ContainsKey,但即使没有值,条件也将始终为假。如果我错了,请纠正我。
    • @Ren 我明白你的意思。我已经相应地编辑了答案。
    • 我已经尝试了第一个。条件总是错误的。第二个答案的条件总是正确的。不知道为什么。顺便说一句,该值是字符串而不是 SNMPObject。
    • @Ren 可能是因为值是“”,正如您在评论中指出的那样。空检查将返回 false,因为 "" 不为空。如果您知道该对象将始终是一个字符串,就像您所做的那样,那么直接转换 (string)ht[3] 会更好。
    • 我的意思是(string)ht[3]ht[3] as string 稍微高效一些,它表达了你知道ht[3] 不能是字符串以外的东西。尽管如此,Dictionary<int, string> 还是比 HashTable 好,其中一个原因是它不需要演员表。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2015-11-04
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2012-04-29
    相关资源
    最近更新 更多