Dictionary.ContainsValue()总是返回true

kka*_*roo 3 .net c# dictionary c#-4.0

我有一个映射到莫尔斯代码的所有字母的字典

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..
Run Code Online (Sandbox Code Playgroud)

我正在尝试检查条件是否存在于字典中的现有莫尔斯代码的子字符串.

 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++; }


        }
Run Code Online (Sandbox Code Playgroud)

data.ContainsValue(sub)即使字典中不存在该值,此处也始终返回true. 代码快照

任何人都可以告诉我,如果我错过任何东西.

yaa*_*kov 6

ContainsValue实际上并没有返回true,但是在if语句之后你有一个迷路分号.这意味着将始终执行以下块,因为它不是有条件地执行的.它被视为如下:

if (data.ContainsValue(sub))
{
}
{
    smallcount++;
}
Run Code Online (Sandbox Code Playgroud)

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

if (data.ContaisnValue(sub))
{
    smallcount++;
}
Run Code Online (Sandbox Code Playgroud)