如果我这样做......
String myVar = "in";
if(myVar.ToUpper() == "in")
{
//do something
}
这不会进入“if”阻止..正确吗?
或
它是否会检查“in”和“IN”中的内容,并执行其中的内容,如果?如果是这样,为什么呢?是不是应该跳过“if”阻止内部的内容?
同样的混乱也是ToLower()
编辑:所以要检查这两种情况,我需要写一下:
if((myVar.ToUpper().Equals("in"))&&(myVar.Equals("in")))
喜欢这个......好吗?
答案 0 :(得分:51)
不应转换为大写然后进行比较,而应使用可以不区分大小写的相等比较。例如:
if (myVar.Equals("in", StringComparison.OrdinalIgnoreCase))
{
...
}
你应该仔细考虑哪些规则是合适的 - 序数,当前文化,不变文化,或者可能完全是另一种文化(例如使用StringComparer.Create(culture, true)
)。
有关此问题的详细信息,请参阅MSDN Best Practices for Using Strings in the .NET Framework文章。
答案 1 :(得分:5)
表达式something.ToUpper().Equals("lowercaseletters")
永远不会成立,因此在您的示例中,if-block将不会被执行。当然,这也适用于ToLower; something.ToLower().Equals("UPPERCASE")
也永远不会成真。
答案 2 :(得分:2)
“IN”不等于“in” - 因此它不执行if块。在toLower()的情况下,它将执行if块作为“in”等于“in”..
答案 3 :(得分:2)
首先,如果你想比较字符串,请使用.Equals()
myVar.toUpper().Equals("in")
第二个首先执行if中的所有代码,之后才测试返回。
所以
String myVar="in";
if(myVar.toUpper().Equals("in"))
{
//do something
}
不要“做点什么”。
答案 4 :(得分:2)
如果你做了类似你说的话,它就不会进入if块,这就是原因:
操作符应用于左侧的对象。所以你的代码与写这个代码相同:
String myVar="in";
String testVar = myVar.ToUpper();
if(testVar=="in") //This will never be true
{
//do something
}
在你的编辑中,你仍然没有测试你的字符串是否为==“IN”,你正在进行2次测试以查看你的字符串是否为==“in”。
如果您将原件改为此,则可以正常工作:
String myVar="in";
if(myVar.ToUpper()=="IN")
{
//do something
}
您的编辑应该像这样来测试两种情况:
if((myVar.ToUpper().Equals("IN"))&&(myVar.Equals("in")))
编辑:史蒂文评论的更多解释:
if((myVar.ToUpper().Equals("IN"))&&(myVar.Equals("in")))
该代码示例进行了2次比较,但如果myVar只是in的混合大小写版本(IE:在In iN IN中),那么第二次比较就没有必要了。一旦我将字符串转换为ToUpper(),您只需要检查它是否等于IN。所以我会用以下代码替换该行:
if(myVar.ToUpper().Equals("IN"))
或
if(myVar.ToUpper() == "IN")
我个人会使用==而不是.Equals方法。