2010-10-30 33 views
1

嘗試以下用C#錯誤在C#試圖將值比較字符串

if (state != 'WI' && state != 'IL') 

該聲明時給我,指出錯誤,我得到一個錯誤時:錯誤!=操作符不能應用到'string'或'char'類型的操作數

如果這是不可能的,那麼完成我的目標的方法是什麼。

回答

6

使用字符串雙引號:

單引號是有用的單個字符:

char c = 'A'; 
if (c != 'B') ... 

編輯:其他人使用Equals比較建議的,我不完全同意,它應取代==方法,除非您有理由使用它。首先,如果statenull,則寫入state.Equals("WI")將引發異常。解決的辦法是使用String.Compare(state, "WI")代替,但不再返回bool和將需要對一個整數(如果它們是相同的則返回0)檢查:

if (String.Compare(state, "WI") != 0) 

其次,我會建議使用兩種Equals或因爲兩者都提供過載String.Compare如果區分大小寫的問題來處理這個問題:

string foo = "Foo"; 
string otherFoo = "foo"; 
Console.WriteLine("Equals: {0}", foo.Equals(otherFoo)); 
Console.WriteLine("Equals case insensitive: {0}", foo.Equals(otherFoo, StringComparison.InvariantCultureIgnoreCase)); 
Console.WriteLine("Compare: {0}", String.Compare(foo, otherFoo) == 0); 
Console.WriteLine("Compare case insensitive: {0}", String.Compare(foo, otherFoo, StringComparison.InvariantCultureIgnoreCase) == 0); 

// make foo null 
foo = null; 
Console.WriteLine("Null Compare: {0}", String.Compare(foo, otherFoo) == 0); 
Console.WriteLine("Null Equals: {0}", foo.Equals(otherFoo)); // exception 
2

用雙引號括字符串文字!

0

您正在使用單引號分隔字符串。這些意思是char

嘗試:

用雙引號。

雖然你的代碼是完全OK,你應該考慮使用string.Equals方法:

if (!state.Equals("WI") && !state.Equals("IL")) 
0

您應該使用 「WI」 也使用等於字符串的方法!state.Equals("WI")

+3

爲什麼他應該使用Equals?它會導致問題,如果狀態== null並且不收穫。 – CodesInChaos 2010-10-30 17:35:26

0
if (!state.Equals("WI") && !state.Equals("IL")) { 
} 
+0

如果'state == null'會引發異常 – 2010-10-30 19:22:21

0

如果這是不可能的,那麼完成我的目標的方法是什麼。

RTFEM! *錯誤消息清楚地表明其中一個操作數被解釋爲char而不是string。在

state != 'WI' 

的情況下,有兩個操作數:state'WI'。如果您宣稱statestring,那麼顯然它不能是state,它被解釋爲char。因此,它必須是'WI',這被解釋爲char。現在你問自己:「爲什麼這被解釋爲char?如果不用單引號括起來(」'「),我該如何在C#中聲明string?」那麼,你谷歌"declare string C#"並點擊「我很幸運」,你點擊Strings (C# Programming Guide)它告訴你聲明一個string文字你用雙引號括起來(「"」)。

因此,

*這並不意味着是不禮貌的,所以不要採取這種方式。這個答案非常符合「如果你教一個人釣魚......」的哲學。