• Статья
  • Чтение занимает 2 мин

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

Сравнение строк, содержащих символы в разных регистрах

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

Чтобы сравнить строки, содержащие символы в разных регистрах, для определения их равенства, вызовите одну из перегрузок метода 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) и укажите в качестве параметра culture значение CultureInfo.InvariantCulture или System.Globalization.CultureInfo, определяющее язык и региональные параметры. Пример, демонстрирующий использование метода 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) и укажите в качестве параметра culture значение CultureInfo.InvariantCulture или System.Globalization.CultureInfo, определяющее язык и региональные параметры. Пример, демонстрирующий использование метода 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("{0} --> {1}", 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 и учитывает язык и региональные параметры, он не обеспечивает лингвистическую правильность использования прописных и строчных букв. Например, в предыдущем примере метод преобразует строку «a tale of two cities» в «A Tale Of Two Cities». При этом лингвистически правильным для языка и региональных параметров en-US будет преобразование «A Tale of Two Cities».

См. также

  • Базовые операции со строками в .NET Framework
  • Выполнение строковых операций, не зависящих от языка и региональных параметров