2012-07-14 172 views
1

爲什麼會發生這種異常?

我有一個dictionary名稱Pair在c#中。它包含一些鍵 - 值對。我添加了一個屏幕快照,在(p.Key == "left)Sequence containes no matching element上生成了一個異常,但是如果您在Pair Dictionary中看到,那麼left鍵將出現在那裏。那麼請有人告訴我爲什麼會發生這種異常?

+1

本字典的鍵和值(TKey,TValue)的類型是什麼? – 2012-07-14 12:14:02

+0

你確定你的Key是一個字符串嗎? – Carra 2012-07-14 12:14:13

+3

爲什麼你會像迭代器一樣使用字典? '對[「左」]'應該更有效率。 – 2012-07-14 12:14:17

回答

4

如果我能看到它,那麼left值的前面會出現一個空格" left",因此p.Key == "left"從不爲真。

改爲使用p.Key.contains("left"),或者在嘗試操縱它之前檢查它是否返回值。或者修剪前後的空格。

1

您應該使用indexerTryGetValue而不是Single。對於Single,沒有理由使用字典。

此外,您的問題源於這樣一個事實,即「左」之前有空格,因此整個字符串實際上是「左」。看看寬度是如何在左邊的一個字符。

1

如果它不是一個白soace問題,那麼唯一的辦法,我可以發生這種情況是如果字典是一個Dictionary<object,...>,在這種情況下==您使用的是參考平等,不串平等。那會導致它失敗。如果是這樣,請使用Dictionary<string,...>或使用Equals("left", p,Key)

請注意Pair["left"]將是一個更好的查找方式。

+0

==爲字符串相等的字符串重寫。 – Euphoric 2012-07-14 12:21:55

+2

@Euphoric:但不清楚它是一個'Dictionary '。它也可以是一個'Dictionary '(其中一個字符串被存儲爲鍵)。在這種情況下,馬克是正確的,使用引用等式不是字符串相等。順便說一句,有人不應該爲競爭的答案祈禱。 – 2012-07-14 12:32:01

相關問題