2010-10-30 22 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文字你用双引号括起来(“"”)。

因此,

*这并不意味着是不礼貌的,所以不要采取这种方式。这个答案非常符合“如果你教一个人钓鱼......”的哲学。