【问题标题】:Dictionary.ContainsValue() always returning trueDictionary.ContainsValue() 总是返回 true
【发布时间】:2017-05-10 06:20:44
【问题描述】:

我有一本映射到摩尔斯电码的所有字母的字典

Dictionary<string, string> data = new Dictionary<string, string>();
        data.Add("a", ".-");
        data.Add("b", "-...");
        data.Add("c", "-.-.");
        data.Add("d", "-..");
        data.Add("e", ".");
        data.Add("f", "..-.");
        data.Add("g", "--.");
        data.Add("h", "....");
        data.Add("i", "..");
        data.Add("j", ".---");
        data.Add("k", "-.-");
        data.Add("l", ".-..");
        data.Add("m", "--");
        data.Add("n", "-.");
        data.Add("o", "---"); and so on..

我正在尝试检查字典中是否存在现有摩尔斯电码的子字符串。

 foreach (var item in arraylist)
        {

            int smallcount=0;
            int startIndex = 0;
            //check if this combination exists for morse code
            for(int w=0;w<shortInput;w++)
            {
                int substringLength=Convert.ToInt32(item[w].ToString());
                string sub = morsecode.Substring(startIndex, substringLength);
                if (data.ContainsValue(sub)) ; 
                {
                    smallcount++;

                }
                startIndex = startIndex + substringLength;
            }

            if(smallcount==shortInput)
            { count++; }


        }

这里data.ContainsValue(sub) 总是返回true,即使字典中不存在该值。

如果我遗漏了什么,谁能告诉我。?

【问题讨论】:

    标签: c# .net dictionary c#-4.0


    【解决方案1】:

    ContainsValue 实际上并没有返回 true,但是 if 语句后面有一个杂散的分号。这意味着将始终执行以下块,因为它不是有条件地执行的。它得到如下处理:

    if (data.ContainsValue(sub))
    {
    }
    {
        smallcount++;
    }
    

    相反,请删除分号,以便在 if 语句之后实际上有一个块,如下所示:

    if (data.ContaisnValue(sub))
    {
        smallcount++;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多