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方法。