Как сделать ввод строки без учета регистра в C #? - PullRequest
0 голосов
/ 18 апреля 2019

Итак, в своем стремлении выучить C # я пытаюсь создать интерактивную историю, которая меняется в зависимости от некоторых вводимых пользователем данных. Если в этом случае пользователь вводит слово «Бобби», рассказчик начинает говорить, как Хэнк Хилл. Однако в зависимости от того, как он запрограммирован, ввод чувствителен к регистру.

Я попробовал одно предложение, которое я видел, которое должно было отформатировать оператор if как:

if (boyName.ToUpper () == "Бобби")

Но это не вызвало команду if с разными регистрами букв

 Console.WriteLine($"{beginning} \n What was the boy's name?");
 boyName = Console.ReadLine();
  if (boyName == "Bobby")
   {
   Console.WriteLine("That boy ain\'t right, I tell ya what... ");
   Console.ReadKey();
   Console.WriteLine($"{boyName} boy dang climbed a big ol' tree..."); 
   Console.ReadKey();
   }

   else
    {
    Console.WriteLine($"The kid named {boyName} climbed a tree...");
    Console.ReadKey();
    }

Я ожидаю получить строку кода, которая будет запускать условие if независимо от случая. Однако все, что я пробовал, не изменило это. Это должно быть определенно "Бобби", или это вызовет условие else

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

Технически лучше использовать сравнение без учета регистра, а не изменять регистр сравниваемых строк, потому что ToUpper() не всегда будет работать должным образом (с точки зрения сравнения) со всеми языками (алфавитами).См. Раздел "Turkish 'i'" в этой статье о складывании кейса для получения дополнительной информации.

Чтобы решить вашу проблему без изменения исходных строк, вы можете использовать String.Equals метод, который принимает аргументы для сравнения строк, а также метод, который определяет тип используемого сравнения.

Поэтому ваш код может выглядеть следующим образом:

if (string.Equals(boyName, "Bobby", StringComparison.OrdinalIgnoreCase))

Или вы можете использовать версию метода экземпляра, которая немного короче:

if (boyName.Equals("Bobby", StringComparison.OrdinalIgnoreCase))
2 голосов
/ 18 апреля 2019

Вы должны попробовать

if (boyName.ToUpper() == "Bobby".ToUpper())
...