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

时间:2010-09-12 12:44:37

标签: c# string-comparison

如果我这样做......

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

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

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

同样的混乱也是ToLower()

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

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

喜欢这个......好吗?

5 个答案:

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