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

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# - Dictionary.ContainsValue()始终返回true-LMLPHP

谁能告诉我我是否有任何遗漏。

最佳答案

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

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


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

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

07-26 08:39