Dictionary.ContainsValue()总是返回true

时间:2016-12-25 09:51:46

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

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

$conn = new mysqli($servername, $username, $password, $dbname);

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

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++; } } 始终返回true。 documentation

任何人都可以告诉我,我是否遗漏了什么。?

1 个答案:

答案 0 :(得分:6)

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

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

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

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