2014-04-04 150 views
1

我會生氣嗎?爲什麼這會返回一個異常!?爲什麼找不到鑰匙?顯然是在那裏!C#字典找不到字符串鍵

public class Spanning { 
    Dictionary<string, City> graph = new Dictionary<string, City>(); 

    public static void Main(string[] args) { 
     new Spanning().Parse("file.in"); 
    } 

    public void Parse(string f) { 
     string[] citySeparator = new string[] {"--"}; 
     using (StreamReader reader = new StreamReader(f)) { 
      string line; 
      while((line = reader.ReadLine()) != null) { 
       if (!line.Contains("--")) { 
        graph[line] = new City {name = line.Substring(0, line.Length - 1)}; 
       } else { 
        string[] split = line.Split(citySeparator, StringSplitOptions.None); 
        City city1 = graph[split[0]]; 
       } 
      } 
     } 
    } 

    class City { 
     Dictionary<City, int> links = new Dictionary<City, int>(); 
     public string name; 

     public override string ToString() { 
      return name; 
     } 
    } 
} 

輸入文件只包含兩行:

"San Diego" 
"San Diego"--"San Antonio" [1319] 
+3

你什麼異常? –

+1

你可以通過代碼? –

+1

嘗試放置一個斷點並逐步查看正在發生的事情。 – Habib

回答

6

文件

"San Diego" 

有最後"和換行之間的空格字符的第一行。

要麼收拾你輸入的文件,或者使用Trim()擺脫它:

... 
if (!line.Contains("--")) { 
    graph[line.Trim()] = new City {name = line.Substring(0, line.Length - 1)}; 
... 
+0

天啊!我***錯過了,當使用它作爲一個關鍵... 謝謝! – Andreas

+1

您也可以將額外的空白複製到您的問題中,這很有幫助:-) – sloth

+0

我發現這通常會讓每位開發者至少遇到一次。第一次後,你開始尋找額外的空白。 –