C#:关于ToUpper()和ToLower()的混淆

C#:关于ToUpper()和ToLower()的混淆,c#,string-comparison,C#,String Comparison,如果我做这样的事 String myVar = "in"; if(myVar.ToUpper() == "in") { //do something } 这不会进入“如果”区,对吗 或 它是否要同时检查“in”和“in”,并执行if中的任何操作?若然,原因为何?它不应该跳过“如果”块中的内容吗 关于ToLower()也有同样的困惑 编辑:为了检查这两种情况,我需要写: if((myVar.ToUpper().Equals("in"))&&(myVar.Equals("i

如果我做这样的事

String myVar = "in";
if(myVar.ToUpper() == "in")
{
    //do something
}
这不会进入“如果”区,对吗

它是否要同时检查“in”和“in”,并执行if中的任何操作?若然,原因为何?它不应该跳过“如果”块中的内容吗

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

编辑:为了检查这两种情况,我需要写:

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

像这样..对吗?

“IN”不等于“IN”-因此它不执行if块。在toLower()的情况下,它会将if块作为“.”中的“In”equals执行。

表达式
something.ToUpper().equals(“lowercaseletters”)
将永远不会为真,因此在您的示例中不会执行if块。当然,这也适用于托洛尔
something.ToLower().Equals(“大写”)
也永远不会为真。

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

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

所以


不要“做某事”。

与其转换成大写字母然后进行比较,不如使用不区分大小写的相等比较。例如:

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

您应该仔细考虑哪些规则是适当的-序数、当前文化、不变文化,或者可能完全是另一种文化(例如使用<代码> StrimeCalper-Read(CultReal,True)< /C> >)。


有关这方面的更多详细信息,请阅读MSDN文章。

如果您按照您所说的那样做,它将不会进入If块,原因如下:

操作符应用于左侧的对象。因此,您的代码与编写此代码相同:

String myVar="in";
String testVar = myVar.ToUpper();
if(testVar=="in") //This will never be true
{
  //do something
}
在编辑中,您仍然没有测试字符串是否==“In”,您正在进行两个测试,以查看字符串是否==“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")))
该代码示例进行了两次比较,但如果myVar只会是in(即:in)的混合大小写版本,则不需要进行第二次比较。一旦我将字符串转换为ToUpper(),您只需要检查它是否等于IN。因此,我将用以下内容替换该行:

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


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

好吧,我会咬一口:为什么要使用
Equals
?史蒂文:法姆皮涅罗显然是用Java写的,这里需要
Equals
,因为
=
对字符串没有重载。在某些语言中,“==”运算符比较两个对象引用以查看它们是否引用同一实例。不过,我认为c#的情况并非如此;操作符在引擎盖下调用String::Equals。它仍然会逐字节比较值,所以实际上你可能想要。Compare()Jon的建议很有说服力,但我想解释一下上面的错误。如果您想检查它是否为“in”,并且不关心大小写,您可以执行
ToLower
并与“in”进行比较,或者
touper
并与
in
进行比较。您不需要多次比较。在任何情况下,我都推荐Jon的建议。我不认为做这两项测试有什么意义。如果第二个是真的,那么第一个也是真的。同样,我也不知道为什么要使用
Equals
。是吗?@Steven我使用它是因为OP在他的问题中使用了它。在第二种情况下,您是正确的。使用它是因为OP使用了它。好吧,这就解释了它,但我向您保证,我们的答案没有义务重复问题中的任何错误。:-)+1是(到目前为止)除了小写和大写之外唯一提到“文化”的答案。对于if语句,我完全同意你的看法,但是字符串的switch语句呢?我在某个地方读到,最好将字符串转换为大写,例如switch(myVar.ToUpper()){case“MYCASE1”:…}@mjf196:这取决于上下文-这里大写的是什么?如果是用户输入,你真的需要考虑你想要的行为是什么。根据MS@PaulZahra的说法,顺序比较是比较字符串最快的方法:是的,但性能几乎总是次于正确性。
if((myVar.ToUpper().Equals("IN"))&&(myVar.Equals("in")))
if(myVar.ToUpper().Equals("IN"))
if(myVar.ToUpper() == "IN")