C#:关于ToUpper()和ToLower()的困惑

如果我做这样的事……

String myVar = "in"; if(myVar.ToUpper() == "in") { //do something } 

这不会进入“if”阻止..正确吗?

要么

它是否会检查“in”和“IN”中的内容并执行其中的内容if if? 如果是这样,为什么呢? 是不是应该跳过“if”块中的内容?

同样的困惑也是关于ToLower()

编辑 :所以要检查两种情况,我需要写:

 if((myVar.ToUpper().Equals("in"))&&(myVar.Equals("in"))) 

像这样……好吗?

您应该使用可以不区分大小写的相等比较,而不是转换为大写然后进行比较。 例如:

 if (myVar.Equals("in", StringComparison.OrdinalIgnoreCase)) { ... } 

您应该仔细考虑哪些规则是合适的 – 序数,当前文化,不变文化,或者可能完全是另一种文化(例如使用StringComparer.Create(culture, true) )。

有关此内容的更多详细信息,请阅读.NET Framework中 MSDN 使用字符串的最佳实践一文。

表达式something.ToUpper().Equals("lowercaseletters")将永远不会为true,因此在您的示例中,if-block将不会被执行。 当然,这也适用于ToLower; something.ToLower().Equals("UPPERCASE")永远不会是真的。

“IN”不等于“in” – 因此它不执行if块。 在toLower()的情况下,它将执行if块,因为“in”等于“in”..

首先,如果你想比较字符串使用.Equals()

 myVar.toUpper().Equals("in") 

第二个首先执行if中的所有代码,然后才测试返回。

所以

 String myVar="in"; if(myVar.toUpper().Equals("in")) { //do something } 

不要“做某事”

如果你像你说的那样做,它将不会进入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(Windows:In InN IN)的混合大小写版本,那么第二次比较就没有必要了。 一旦我将字符串转换为ToUpper(),您只需要检查它是否等于IN。 所以我会用以下代码替换该行:

 if(myVar.ToUpper().Equals("IN")) 

要么

 if(myVar.ToUpper() == "IN") 

我个人会使用==而不是.Equals方法。