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")