Бөлісу құралы:


Изменение регистра в .NET

Если вы пишете приложение, которое принимает входные данные от пользователя, вы никогда не можете быть уверены в том, какой случай (верхний или нижний) он будет использовать для ввода данных. Часто необходимо привести строки к единому регистру, особенно если они отображаются в пользовательском интерфейсе. В следующей таблице описаны три метода изменения регистра. Первые два метода предоставляют перегрузку, которая принимает культуру.

Имя метода Использование
String.ToUpper Преобразует все символы в строку в верхний регистр.
String.ToLower Преобразует все символы в строке в нижний регистр.
TextInfo.ToTitleCase Преобразует строку в регистр заголовка.

Предупреждение

Методы String.ToUpper и String.ToLower не должны использоваться для преобразования строк с целью их сравнения или проверки на равенство. Дополнительные сведения см. в разделе "Сравнение строк смешанного регистра ".

Сравнение строк смешанного регистра

Чтобы сравнить строки смешанного регистра для определения их упорядочения, вызовите одну из перегрузок String.CompareTo метода с comparisonType параметром и укажите значение либо StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCaseлибо StringComparison.OrdinalIgnoreCase для аргумента comparisonType . Для сравнения, использующего определенные язык и региональные параметры, отличные от текущих, вызовите перегрузку метода с параметрами String.CompareTo и culture, указав значение options в качестве аргумента CompareOptions.IgnoreCase.

Вызовите одну из перегрузок метода String.Equals с параметром comparisonType и укажите значение либо StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCase, либо StringComparison.OrdinalIgnoreCase для аргумента comparisonType, чтобы сравнить строки смешанного регистра и определить, равны ли они.

Дополнительные сведения см. в рекомендациях по использованию строк.

ToUpperМетод

Метод String.ToUpper изменяет все символы в строке на верхний регистр. В следующем примере строка "Hello World!" преобразуется из смешанного регистра в прописные буквы.

string properString = "Hello World!";
Console.WriteLine(properString.ToUpper());
// This example displays the following output:
//       HELLO WORLD!
Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.ToUpper())
' This example displays the following output:
'       HELLO WORLD!

Предыдущий пример по умолчанию чувствителен к языковым и культурным настройкам; он применяет правила изменения регистра, соответствующие текущим настройкам культуры. Чтобы выполнить изменение регистра без учёта языка и региональных параметров или применить соглашения о регистре определенного языка и региональных параметров, используйте перегрузку метода String.ToUpper(CultureInfo) и укажите значение CultureInfo.InvariantCulture или объект System.Globalization.CultureInfo, представляющий указанный язык и региональные параметры, в параметре culture. Пример того, как использовать метод ToUpper, чтобы изменить регистр без учета культурных различий, см. в разделе «Выполнение изменений регистра без учета культурных различий».

ToLowerМетод

Метод String.ToLower аналогичен предыдущему методу, но вместо этого преобразует все символы в строке в нижний регистр. В следующем примере строка "Hello World!" преобразуется в нижний регистр.

string properString = "Hello World!";
Console.WriteLine(properString.ToLower());
// This example displays the following output:
//       hello world!
Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.ToLower())
' This example displays the following output:
'       hello world!

Предыдущий пример по умолчанию чувствителен к языковым и культурным настройкам; он применяет правила изменения регистра, соответствующие текущим настройкам культуры. Чтобы выполнить изменение регистра без учёта языка и региональных параметров или применить соглашения о регистре определенного языка и региональных параметров, используйте перегрузку метода String.ToLower(CultureInfo) и укажите значение CultureInfo.InvariantCulture или объект System.Globalization.CultureInfo, представляющий указанный язык и региональные параметры, в параметре culture. Пример того, как использовать метод ToLower(CultureInfo), чтобы изменить регистр без учета культурных различий, см. в разделе «Выполнение изменений регистра без учета культурных различий».

ToTitleCaseМетод

TextInfo.ToTitleCase преобразует первую букву каждого слова в верхний регистр, а оставшиеся буквы в нижний. Тем не менее, слова, которые являются полностью верхним регистром, считаются акронимами и не преобразуются.

Метод TextInfo.ToTitleCase учитывает язык и региональные параметры, то есть использует соглашения о регистре определенного языка и региональных параметров. Для вызова метода сначала извлекается TextInfo объект, представляющий соглашения о регистре конкретной культуры из CultureInfo.TextInfo свойства определенной культуры.

В следующем примере каждая строка в массиве передается методу TextInfo.ToTitleCase . Строки включают корректные строки заголовков, а также акронимы. Строки преобразуются в регистр заглавных букв с использованием соглашений о регистре культуры английского языка (США).

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { "a tale of two cities", "gROWL to the rescue",
                          "inside the US government", "sports and MLB baseball",
                          "The Return of Sherlock Holmes", "UNICEF and children"};

      TextInfo ti = CultureInfo.CurrentCulture.TextInfo;
      foreach (var value in values)
         Console.WriteLine($"{value} --> {ti.ToTitleCase(value)}");
   }
}
// The example displays the following output:
//    a tale of two cities --> A Tale Of Two Cities
//    gROWL to the rescue --> Growl To The Rescue
//    inside the US government --> Inside The US Government
//    sports and MLB baseball --> Sports And MLB Baseball
//    The Return of Sherlock Holmes --> The Return Of Sherlock Holmes
//    UNICEF and children --> UNICEF And Children
Imports System.Globalization

Module Example
    Public Sub Main()
        Dim values() As String = {"a tale of two cities", "gROWL to the rescue",
                                   "inside the US government", "sports and MLB baseball",
                                   "The Return of Sherlock Holmes", "UNICEF and children"}

        Dim ti As TextInfo = CultureInfo.CurrentCulture.TextInfo
        For Each value In values
            Console.WriteLine("{0} --> {1}", value, ti.ToTitleCase(value))
        Next
    End Sub
End Module
' The example displays the following output:
'    a tale of two cities --> A Tale Of Two Cities
'    gROWL to the rescue --> Growl To The Rescue
'    inside the US government --> Inside The US Government
'    sports and MLB baseball --> Sports And MLB Baseball
'    The Return of Sherlock Holmes --> The Return Of Sherlock Holmes
'    UNICEF and children --> UNICEF And Children

Обратите внимание, что, хотя метод TextInfo.ToTitleCase учитывает культурные особенности, он не предоставляет лингвистически правильные правила использования заглавных букв. Например, в предыдущем примере метод преобразует "сказку двух городов" в "Сказка о двух городах". Тем не менее, лингвистически корректное название для en-US культуры называется "Повесть о двух городах".

См. также