2016-12-25 139 views
2

我把所有字母的字典映射到莫尔斯电码Dictionary.ContainsValue()总是返回true

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。 Code Snapshot

任何人都可以告诉我,如果我失去了什么。

回答

6

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

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

相反,删除分号,这样你实际上有一个块直接跟if语句,就像这样:

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

多么愚蠢的错误。万分感谢 :-) – kakroo