2016-12-25 131 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