13

如果我做这样的事情......

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

这不会进入“if”块..对吗?

或者

它是否会同时检查“in”和“IN”并在里面做任何事情?如果是这样,那是为什么?难道不应该跳过“if”块内的内容吗?

同样的困惑也ToLower()差不多

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

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

像这样..对吗?

4

5 回答 5

54

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

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

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

有关这方面的更多详细信息,请阅读.NET Framework文章中的 MSDN Best Practices for Using Strings。

于 2010-09-12T12:53:02.270 回答
5

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

于 2010-09-12T12:48:34.550 回答
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 IN) 的混合大小写版本,则不需要进行第二次比较。将字符串转换为 ToUpper() 后,您只需检查它是否等于 IN。所以我会用:

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

或者

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

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

于 2010-09-12T13:21:07.087 回答
2

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

于 2010-09-12T12:48:03.983 回答
2

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

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

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

所以

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

不要“做某事”

于 2010-09-12T12:48:38.483 回答