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

Ser*_*ity 11 c# string-comparison

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

String myVar = "in";
if(myVar.ToUpper() == "in")
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)

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

要么

它是否会检查"in"和"IN"中的内容并执行其中的内容if if?如果是这样,为什么呢?是不是应该跳过"if"块里面的内容?

同样的混乱也是ToLower()如此

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

if((myVar.ToUpper().Equals("in"))&&(myVar.Equals("in")))
Run Code Online (Sandbox Code Playgroud)

像这样......好吗?

Jon*_*eet 51

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

if (myVar.Equals("in", StringComparison.OrdinalIgnoreCase))
{
     ...
}
Run Code Online (Sandbox Code Playgroud)

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

有关此内容的更多详细信息,请阅读.NET Framework中的MSDN 使用字符串最佳实践一文.

  • @PaulZahra:是的,但性能几乎总是次要的正确性. (5认同)

Arv*_*tad 5

表达式something.ToUpper().Equals("lowercaseletters")永远不会成立,因此在您的示例中,if-block将不会被执行.当然,这也适用于ToLower; something.ToLower().Equals("UPPERCASE")永远也不会是真的.