C#: путаница в отношении ToUpper () и ToLower()

Если я сделаю что-то подобное...

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

Это не будет идти внутрь блока "если"..правильно?

или

собирается ли он проверять как "в", так и" В " и делать все, что есть внутри, если? Если так, то почему ? Разве он не должен пропустить то, что внутри блока "если"?

та же путаница о ToLower() слишком

редактировать: поэтому, чтобы проверить оба случая, мне нужно написать:

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

как этот..правильно?

5 ответов


вместо преобразования в верхний регистр, а затем сравнения, вы должны использовать сравнение равенства, которое может быть сделано без учета регистра. Например:

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

вы должны тщательно рассмотреть, какие именно правила подходят-порядковый номер, текущая культура, инвариантная культура или, возможно, другая культура полностью (например, использование StringComparer.Create(culture, true)).

для получения более подробной информации об этом прочитайте MSDN рекомендации по использованию строк в .NET Framework статья.


выражение something.ToUpper().Equals("lowercaseletters") никогда не будет true, поэтому в вашем примере блок if не будет выполнен. И, конечно, это относится и к ToLower;something.ToLower().Equals("UPPERCASE") также никогда не будет истинным.


" IN "не равно" in " - поэтому он не выполняет блок if. В случае toLower () он выполнит блок if как "in" равно "in"..


сначала, если вы хотите сравнить использование строк .Equals ()

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

второй сначала выполняется весь код внутри if, только после этого проверяется возврат.

так

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

не "что-то".


если вы сделаете что-то, как вы сказали, он не войдет в блок 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")))

EDIT: еще одно объяснение Из комментария Стивена:

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

этот образец кода делает 2 сравнения, но если myVar будет только когда-либо смешанными версиями случая in (т. е.: In In iN IN), то второе сравнение не требуется. Как только я преобразовал строку в ToUpper(), вам нужно только проверить, равно ли она IN. Поэтому я бы заменил эту строку:

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

или

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

Я бы лично использовал == не .Метод Equals.