Hastable包含值条件不工作

本文关键字:工作 条件 包含值 Hastable | 更新日期: 2023-09-27 18:03:33

我已经创建了一个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)包含值,它仍然执行设置操作。有人能给点建议吗?

Hastable包含值条件不工作

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

你也应该使用Dictionary<,>代替HashTable,如果可能的话。除非键和值具有相同的类型(或者键类型可以隐式地转换为值类型),否则该类不会允许您犯此错误。

如果键存在,但关联值为null,则需要

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

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

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