2009-09-09 47 views
0

我假定這應該是細字符串比較設置爲布爾變量

bool prefMatch = false; 

// Is the frequency the same? 
prefMatch = string.Compare(user.Frequency, pref.Action.ToString()) == 0; 

所以如果user.Frequency是「3」和pref.Action.ToString()是「3」,那麼它應該在prefMatch設置爲真的對嗎?我越來越假,我肯定檢查了在VS 2008腕錶選項卡中的2個值只是要確定它們是相同的

+5

'String.Compare'不破。 :) – 2009-09-09 04:01:42

+0

我實際上有一個不同的價值被比較比我想象的。工作正常。 – PositiveGuy 2009-09-10 00:16:36

回答

5

你可以使用==

prefMath = (user.Frequency == pref.Action.ToString()); 

雖然string.Compare也將工作。我建議其他地方有一個問題。

- 編輯

而且,只是爲了完整,沒有點分配到的東西一個變量,然後直接後重新分配它。這樣做有點令人困惑,所以最好不要分配它,或者將它全部分配到一個地方。這樣編譯器可以幫助你,如果你有一個情況,它不會像你想象的那樣分配。如果您在try/catch包住第二次分配,雖然這是很明顯的,可接受的指配第一。

2

在類似這種情況下,它有時很誘人的第三方代碼指向矛頭,因爲你已經在這裏完成。有時候,這是有道理的 - 但不在這裏。 String.Compare是.NET框架的核心,經過非常嚴格測試。這並不是失敗。我保證。

我發現了什麼在這些情況下是有幫助的隔離故障。編寫一個小型自包含的測試用例,試圖展示問題。用盡可能少的依賴性編寫它。如果可能的話,使其成爲獨立的控制檯應用程序。張貼在這裏。如果我們能夠接受它,編譯並運行它,並重現問題,我們可以爲您提供幫助。不過,我敢打賭,在創建這個測試案例的過程中,你會經歷一次頭部拍打的時刻 - 「當然!」 - 並意識到問題所在。

0

也許字符串(S)含有不可打印字符? 要檢查,我會做一些事情,如:

byte[] b1 = System.Text.Encoding.UTF8.GetBytes(user.Frequency); 
byte[] b2 = System.Text.Encoding.UTF8.GetBytes(pref.Action.ToString()); 

然後比較的B1和B2內容。