String String String String Class

Определение

Представляет текст как последовательность из частей кода UTF-16.Represents text as a sequence of UTF-16 code units.

public ref class String sealed : ICloneable, IComparable, IComparable<System::String ^>, IConvertible, IEquatable<System::String ^>, System::Collections::Generic::IEnumerable<char>
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class String : ICloneable, IComparable, IComparable<string>, IConvertible, IEquatable<string>, System.Collections.Generic.IEnumerable<char>
type string = class
    interface IComparable
    interface ICloneable
    interface IConvertible
    interface IEnumerable
    interface IComparable<string>
    interface seq<char>
    interface IEquatable<string>
Public NotInheritable Class String
Implements ICloneable, IComparable, IComparable(Of String), IConvertible, IEnumerable(Of Char), IEquatable(Of String)
Наследование
StringStringStringString
Атрибуты
Реализации

Комментарии

Строка является упорядоченной коллекции символов, который используется для представления текста.A string is a sequential collection of characters that is used to represent text. Объект String объект является упорядоченной коллекции System.Char объекты, представляющие строку; System.Char соответствует единицу кода UTF-16.A String object is a sequential collection of System.Char objects that represent a string; a System.Char object corresponds to a UTF-16 code unit. Значение String объекта заключается в содержании упорядоченной коллекции System.Char объекты, и что значение является неизменяемым (то есть это только для чтения).The value of the String object is the content of the sequential collection of System.Char objects, and that value is immutable (that is, it is read-only). Дополнительные сведения о неизменность строк, см. в разделе неизменность и класс StringBuilder подразделе данного раздела.For more information about the immutability of strings, see the Immutability and the StringBuilder class section later in this topic. Максимальный размер String объект в памяти — 2 ГБ, около 1 миллиарда символы.The maximum size of a String object in memory is 2GB, or about 1 billion characters.

Примечание

Некоторые примеры C# в этой статье выполняются во встроенном средстве выполнения кода и на тестовой площадке Try.NET.Some of the C# examples in this article run in the Try.NET inline code runner and playground. Когда на экране появится кнопка Выполнить, нажмите ее, чтобы выполнить пример в интерактивном окне.When present, select the Run button to run an example in an interactive window. После выполнения кода вы можете изменить его и выполнить измененный код, снова нажав на кнопку Выполнить.Once you execute the code, you can modify it and run the modified code by selecting Run again. Либо в интерактивном окне выполняется измененный код, либо, если компиляция завершается с ошибкой, в интерактивном окне отображаются все сообщения об ошибках компилятора C#.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

СодержаниеIn this section:

Создание экземпляра объекта строки Instantiating a String object
Объекты char и символы Юникода Char objects and Unicode characters
Строки и стандарт Юникода Strings and The Unicode Standard
Строки и внедренные символы null Strings and embedded null characters
Строки и индексы Strings and indexes
Строки NULL и пустые строки Null strings and empty strings
Неизменность и класса StringBuilder Immutability and the StringBuilder class
Порядковый номер и операций с учетом языка и региональных параметров Ordinal vs. culture-sensitive operations
Нормализация Normalization
Операции со строками по категориямString operations by category

Создание экземпляра объекта строкиInstantiating a String object

Можно создать экземпляр String объект одним из следующих способов:You can instantiate a String object in the following ways:

  • Назначив строковый литерал String переменной.By assigning a string literal to a String variable. Это наиболее часто используемый метод для создания строки.This is the most commonly used method for creating a string. В следующем примере присваивания используется для создания нескольких строк.The following example uses assignment to create several strings. Обратите внимание, что в C#, так как обратная косая черта (\) является escape-символа, необходимо экранировать символы обратной косой черты, литерал в строке или вся строка должны быть @-quoted.Note that in C#, because the backslash (\) is an escape character, literal backslashes in a string must be escaped or the entire string must be @-quoted.

    using namespace System;
    
    void main()
    {
       String^ string1 = "This is a string created by assignment.";
       Console::WriteLine(string1);
       String^ string2a = "The path is C:\\PublicDocuments\\Report1.doc";
       Console::WriteLine(string2a);
    }
    // The example displays the following output: 
    //       This is a string created by assignment. 
    //       The path is C:\PublicDocuments\Report1.doc 
    
    string string1 = "This is a string created by assignment.";
    Console.WriteLine(string1);
    string string2a = "The path is C:\\PublicDocuments\\Report1.doc";
    Console.WriteLine(string2a);
    string string2b = @"The path is C:\PublicDocuments\Report1.doc";
    Console.WriteLine(string2b);
    // The example displays the following output:
    //       This is a string created by assignment.
    //       The path is C:\PublicDocuments\Report1.doc
    //       The path is C:\PublicDocuments\Report1.doc      
    
    Dim string1 As String = "This is a string created by assignment."
    Console.WriteLine(string1)
    Dim string2 As String = "The path is C:\PublicDocuments\Report1.doc"
    Console.WriteLine(string2)
    ' The example displays the following output:
    '       This is a string created by assignment.
    '       The path is C:\PublicDocuments\Report1.doc      
    
  • Путем вызова String конструктора класса.By calling a String class constructor. В следующем примере создается строк путем вызова несколько конструкторов класса.The following example instantiates strings by calling several class constructors. Обратите внимание, что некоторые конструкторы включают указатели на массивы символов или байт со знаком массивов в качестве параметров.Note that some of the constructors include pointers to character arrays or signed byte arrays as parameters. Visual Basic не поддерживает вызовы этих конструкторов.Visual Basic does not support calls to these constructors. Подробные сведения о String конструкторы, см. в разделе String конструктор сводки.For detailed information about String constructors, see the String constructor summary.

    using namespace System;
    
    void main()
    {
       wchar_t chars[5] = L"word";
       char bytes[6] = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x00 };
    
       // Create a string from a character array. 
       String^ string1 = gcnew String(chars);
       Console::WriteLine(string1);
    
       // Create a string that consists of a character repeated 20 times. 
       String^ string2 = gcnew String('c', 20);
       Console::WriteLine(string2);
    
       String^ stringFromBytes = nullptr;
       String^ stringFromChars = nullptr;
    
       char * pbytes = &bytes[0];
       // Create a string from a pointer to a signed byte array.
       stringFromBytes = gcnew String(pbytes);
    
       wchar_t* pchars =  &chars[0];
       // Create a string from a pointer to a character array.
       stringFromChars = gcnew String(pchars);
    
       Console::WriteLine(stringFromBytes);
       Console::WriteLine(stringFromChars);
       Console::ReadLine();
    }
    // The example displays the following output: 
    //       word 
    //       cccccccccccccccccccc 
    //       ABCDE 
    //       word  
    
    char[] chars = { 'w', 'o', 'r', 'd' };
    sbyte[] bytes = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x00 };
    
    // Create a string from a character array.
    string string1 = new string(chars);
    Console.WriteLine(string1);
    
    // Create a string that consists of a character repeated 20 times.
    string string2 = new string('c', 20);
    Console.WriteLine(string2);
    
    string stringFromBytes = null;
    string stringFromChars = null;
    unsafe
    {
       fixed (sbyte* pbytes = bytes)
       {
          // Create a string from a pointer to a signed byte array.
          stringFromBytes = new string(pbytes);
       }
       fixed (char* pchars = chars)
       {
          // Create a string from a pointer to a character array.
          stringFromChars = new string(pchars);
       }
    }
    Console.WriteLine(stringFromBytes);
    Console.WriteLine(stringFromChars);
    // The example displays the following output:
    //       word
    //       cccccccccccccccccccc
    //       ABCDE
    //       word  
    
    Dim chars() As Char = { "w"c, "o"c, "r"c, "d"c }
    
    ' Create a string from a character array.
    Dim string1 As New String(chars)
    Console.WriteLine(string1)
    
    ' Create a string that consists of a character repeated 20 times.
    Dim string2 As New String("c"c, 20)
    Console.WriteLine(string2)
    ' The example displays the following output:
    '       word
    '       cccccccccccccccccccc      
    
  • С помощью оператора объединения строк (+ в C# и & или + в Visual Basic) для создания одной строки из любого сочетания String экземпляров и строковые литералы.By using the string concatenation operator (+ in C# and & or + in Visual Basic) to create a single string from any combination of String instances and string literals. Следующий пример иллюстрирует использование оператора объединения строк.The following example illustrates the use of the string concatenation operator.

    String^ string1 = "Today is " + DateTime::Now.ToString("D") + ".";
    Console::WriteLine(string1);
    
    String^ string2 = "This is one sentence. " + "This is a second. ";
    string2 += "This is a third sentence.";
    Console::WriteLine(string2);
    // The example displays output like the following: 
    //    Today is Tuesday, July 06, 2011. 
    //    This is one sentence. This is a second. This is a third sentence.
    
    string string1 = "Today is " + DateTime.Now.ToString("D") + ".";
    Console.WriteLine(string1);
    
    string string2 = "This is one sentence. " + "This is a second. ";
    string2 += "This is a third sentence.";
    Console.WriteLine(string2);
    // The example displays output like the following:
    //    Today is Tuesday, July 06, 2011.
    //    This is one sentence. This is a second. This is a third sentence.
    
    Dim string1 As String = "Today is " + Date.Now.ToString("D") + "."  
    Console.WriteLine(string1)
    Dim string2 As String = "This is one sentence. " + "This is a second. "
    string2 += "This is a third sentence."
    Console.WriteLine(string2)      
    ' The example displays output like the following:
    '    Today is Tuesday, July 06, 2011.
    '    This is one sentence. This is a second. This is a third sentence.
    
  • Путем получения свойства или вызов метода, который возвращает строку.By retrieving a property or calling a method that returns a string. В следующем примере используется методы класса String класса для извлечения подстроки в строку большего размера.The following example uses the methods of the String class to extract a substring from a larger string.

    String^ sentence = "This sentence has five words.";
    // Extract the second word.
    int startPosition = sentence->IndexOf(" ") + 1;
    String^ word2 = sentence->Substring(startPosition, 
                                        sentence->IndexOf(" ", startPosition) - startPosition);
    Console::WriteLine("Second word: " + word2);
    
    string sentence = "This sentence has five words.";
    // Extract the second word.
    int startPosition = sentence.IndexOf(" ") + 1;
    string word2 = sentence.Substring(startPosition,
                                      sentence.IndexOf(" ", startPosition) - startPosition);
    Console.WriteLine("Second word: " + word2);
    // The example displays the following output:
    //       Second word: sentence
    
    Dim sentence As String = "This sentence has five words."
    ' Extract the second word.
    Dim startPosition As Integer = sentence.IndexOf(" ") + 1
    Dim word2 As String = sentence.Substring(startPosition, 
                                             sentence.IndexOf(" ", startPosition) - startPosition) 
    Console.WriteLine("Second word: " + word2)
    ' The example displays the following output:
    '       Second word: sentence
    
  • С помощью метода форматирования для преобразования значения или объекта в строковое представление.By calling a formatting method to convert a value or object to its string representation. В следующем примере используется составное форматирование возможность внедрить строковую презентацию два объекта в строку.The following example uses the composite formatting feature to embed the string representation of two objects into a string.

    DateTime^ dateAndTime = gcnew DateTime(2011, 7, 6, 7, 32, 0);
    Double temperature = 68.3;
    String^ result = String::Format("At {0:t} on {0:D}, the temperature was {1:F1} degrees Fahrenheit.",
                                   dateAndTime, temperature);
    Console::WriteLine(result);
    // The example displays the following output: 
    //       At 7:32 AM on Wednesday, July 06, 2011, the temperature was 68.3 degrees Fahrenheit.      
    
    DateTime dateAndTime = new DateTime(2011, 7, 6, 7, 32, 0);
    double temperature = 68.3;
    string result = String.Format("At {0:t} on {0:D}, the temperature was {1:F1} degrees Fahrenheit.",
                                  dateAndTime, temperature);
    Console.WriteLine(result);
    // The example displays the following output:
    //       At 7:32 AM on Wednesday, July 06, 2011, the temperature was 68.3 degrees Fahrenheit.      
    
    Dim dateAndTime As DateTime = #07/06/2011 7:32:00AM#
    Dim temperature As Double = 68.3
    Dim result As String = String.Format("At {0:t} on {0:D}, the temperature was {1:F1} degrees Fahrenheit.",
                                         dateAndTime, temperature)
    Console.WriteLine(result)
    ' The example displays the following output:
    '       At 7:32 AM on Wednesday, July 06, 2011, the temperature was 68.3 degrees Fahrenheit.      
    

Объекты char и символы ЮникодаChar objects and Unicode characters

Каждый символ в строке определяется скалярное значение Юникод, которые также называют кодовую точку Юникода или порядковый номер (числовое) значение символа Юникода.Each character in a string is defined by a Unicode scalar value, also called a Unicode code point or the ordinal (numeric) value of the Unicode character. Каждую кодовую точку кодируется, используя кодировку UTF-16, а числовое значение каждого элемента кодировки представлен Char объекта.Each code point is encoded by using UTF-16 encoding, and the numeric value of each element of the encoding is represented by a Char object.

Примечание

Обратите внимание, что, поскольку String экземпляра состоит из упорядоченной коллекции частей кода UTF-16, можно создать String объект, который не является правильным форматом строки Юникода.Note that, because a String instance consists of a sequential collection of UTF-16 code units, it is possible to create a String object that is not a well-formed Unicode string. Например можно создать строки, которая содержит младшим символом-заместителем без соответствующего старшим символом-заместителем.For example, it is possible to create a string that has a low surrogate without a corresponding high surrogate. Несмотря на то что некоторые методы, такие как методы кодирования и декодирования объектов в System.Text пространства имен, может выполняет проверку, чтобы убедиться, что строки сформированы, String члены класса не гарантируют, что строка имеет правильный формат.Although some methods, such as the methods of encoding and decoding objects in the System.Text namespace, may performs checks to ensure that strings are well-formed, String class members don't ensure that a string is well-formed.

Один Char объект обычно представляет отдельную кодовую точку, то есть числовое значение Char равно кодовой точке.A single Char object usually represents a single code point; that is, the numeric value of the Char equals the code point. Например, кодовая точка для символа «» разрешается 0061 U +.For example, the code point for the character "a" is U+0061. Однако кодовую точку может потребоваться более одного элемента кодировки (более одного Char объекта).However, a code point might require more than one encoded element (more than one Char object). Стандарт Юникод определяет два типа символов, которые соответствуют к нескольким Char объектов: graphemes и добавочные кодовые позиции Юникода, соответствующие символы в плоскостей Юникода.The Unicode standard defines two types of characters that correspond to multiple Char objects: graphemes, and Unicode supplementary code points that correspond to characters in the Unicode supplementary planes.

  • Графем представляется базового символа, за которыми следует один или несколько символов объединения.A grapheme is represented by a base character followed by one or more combining characters. Например, символ д представлен объект Char объект, которого кодовая точка U + 0061 следуют объект Char объект, которого кодовая точка U + 0308.For example, the character ä is represented by a Char object whose code point is U+0061 followed by a Char object whose code point is U+0308. Также этот символ можно определить с помощью одной Char объект с кодовой точкой U + 00E4.This character can also be defined by a single Char object that has a code point of U+00E4. Как в следующем примере показано, учитывающего культуру сравнения на равенство указывает, что эти два представления равны, несмотря на то, что обычные порядковое сравнение — нет.As the following example shows, a culture-sensitive comparison for equality indicates that these two representations are equal, although an ordinary ordinal comparison does not. Тем не менее если две строки были нормализованы, порядковое сравнение также указывает, что они равны.However, if the two strings are normalized, an ordinal comparison also indicates that they are equal. (Дополнительные сведения о нормализации строк, см. в разделе нормализации разделе.)(For more information on normalizing strings, see the Normalization section.)

    using namespace System;
    using namespace System::Globalization;
    using namespace System::IO;
    
    void main()
    {
       StreamWriter^ sw = gcnew StreamWriter(".\\graphemes.txt");
       String^ grapheme = L"a" + L"\u0308";
       sw->WriteLine(grapheme);
    
       String^ singleChar = "\u00e4";
       sw->WriteLine(singleChar);
    
       sw->WriteLine("{0} = {1} (Culture-sensitive): {2}", grapheme, singleChar, 
                      String::Equals(grapheme, singleChar, 
                                  StringComparison::CurrentCulture));
       sw->WriteLine("{0} = {1} (Ordinal): {2}", grapheme, singleChar, 
                      String::Equals(grapheme, singleChar, 
                                  StringComparison::Ordinal));
       sw->WriteLine("{0} = {1} (Normalized Ordinal): {2}", grapheme, singleChar, 
                      String::Equals(grapheme->Normalize(), 
                                  singleChar->Normalize(), 
                                  StringComparison::Ordinal));
       sw->Close(); 
    }
    // The example produces the following output: 
    //       ä 
    //       ä 
    //       ä = ä (Culture-sensitive): True 
    //       ä = ä (Ordinal): False 
    //       ä = ä (Normalized Ordinal): True
    
    using System;
    using System.Globalization;
    using System.IO;
    
    public class Example
    {
       public static void Main()
       {
          StreamWriter sw = new StreamWriter(@".\graphemes.txt");
          string grapheme = "\u0061\u0308";
          sw.WriteLine(grapheme);
          
          string singleChar = "\u00e4";
          sw.WriteLine(singleChar);
                
          sw.WriteLine("{0} = {1} (Culture-sensitive): {2}", grapheme, singleChar, 
                       String.Equals(grapheme, singleChar, 
                                     StringComparison.CurrentCulture));
          sw.WriteLine("{0} = {1} (Ordinal): {2}", grapheme, singleChar, 
                       String.Equals(grapheme, singleChar, 
                                     StringComparison.Ordinal));
          sw.WriteLine("{0} = {1} (Normalized Ordinal): {2}", grapheme, singleChar, 
                       String.Equals(grapheme.Normalize(), 
                                     singleChar.Normalize(), 
                                     StringComparison.Ordinal));
          sw.Close(); 
       }
    }
    // The example produces the following output:
    //       ä
    //       ä
    //       ä = ä (Culture-sensitive): True
    //       ä = ä (Ordinal): False
    //       ä = ä (Normalized Ordinal): True
    
    Imports System.Globalization
    Imports System.IO
    
    Module Example
       Public Sub Main()
          Dim sw As New StreamWriter(".\graphemes.txt")
          Dim grapheme As String = ChrW(&H0061) + ChrW(&h0308)
          sw.WriteLine(grapheme)
          
          Dim singleChar As String = ChrW(&h00e4)
          sw.WriteLine(singleChar)
                
          sw.WriteLine("{0} = {1} (Culture-sensitive): {2}", grapheme, singleChar, 
                       String.Equals(grapheme, singleChar, 
                                     StringComparison.CurrentCulture))
          sw.WriteLine("{0} = {1} (Ordinal): {2}", grapheme, singleChar, 
                       String.Equals(grapheme, singleChar, 
                                     StringComparison.Ordinal))
          sw.WriteLine("{0} = {1} (Normalized Ordinal): {2}", grapheme, singleChar, 
                       String.Equals(grapheme.Normalize(), 
                                     singleChar.Normalize(), 
                                     StringComparison.Ordinal))
          sw.Close() 
       End Sub
    End Module
    ' The example produces the following output:
    '       ä
    '       ä
    '       ä = ä (Culture-sensitive): True
    '       ä = ä (Ordinal): False
    '       ä = ä (Normalized Ordinal): True
    
  • Юникода, представленный добавочную кодовую позицию (суррогатная пара) Char объект которого кодовая точка является заместителем, за которым следует Char объект которого кодовая точка является младшим символом-заместителем.A Unicode supplementary code point (a surrogate pair) is represented by a Char object whose code point is a high surrogate followed by a Char object whose code point is a low surrogate. Единицы кода высокой суррогаты в диапазоне от U + D800 до U + DBFF.The code units of high surrogates range from U+D800 to U+DBFF. Единицы кода низкой суррогаты в диапазоне от U + DC00 до U + DFFF.The code units of low surrogates range from U+DC00 to U+DFFF. Суррогатные пары используются для представления символов в 16 плоскостей Юникода.Surrogate pairs are used to represent characters in the 16 Unicode supplementary planes. В следующем примере символ-заместитель создает и передает его Char.IsSurrogatePair(Char, Char) метод, чтобы определить, является ли оно суррогатную пару.The following example creates a surrogate character and passes it to the Char.IsSurrogatePair(Char, Char) method to determine whether it is a surrogate pair.

    using namespace System;
    
    void main()
    {
       String^ surrogate =  L"\xD800\xDC03" ;
       for (int ctr = 0; ctr < surrogate->Length; ctr++)
          Console::Write("U+{0:X4} ", Convert::ToUInt16(surrogate[ctr]));
    
       Console::WriteLine();
       Console::WriteLine("   Is Surrogate Pair: {0}", 
                          Char::IsSurrogatePair(surrogate[0], surrogate[1]));
       Console::ReadLine();
    }
    // The example displays the following output: 
    //       U+D800 U+DC03 
    //          Is Surrogate Pair: True
    
    string surrogate = "\uD800\uDC03";
    for (int ctr = 0; ctr < surrogate.Length; ctr++) 
       Console.Write("U+{0:X2} ", Convert.ToUInt16(surrogate[ctr]));
    
    Console.WriteLine();
    Console.WriteLine("   Is Surrogate Pair: {0}", 
                      Char.IsSurrogatePair(surrogate[0], surrogate[1]));
    // The example displays the following output:
    //       U+D800 U+DC03
    //          Is Surrogate Pair: True
    
    Module Example
       Public Sub Main()
          Dim surrogate As String = ChrW(&hD800) + ChrW(&hDC03)
          For ctr As Integer = 0 To surrogate.Length - 1
             Console.Write("U+{0:X2} ", Convert.ToUInt16(surrogate(ctr)))
          Next   
          Console.WriteLine()
          Console.WriteLine("   Is Surrogate Pair: {0}", 
                            Char.IsSurrogatePair(surrogate(0), surrogate(1)))
       End Sub
    End Module
    
    ' The example displays the following output:
    '       U+D800 U+DC03
    '          Is Surrogate Pair: True
    

Строки и стандарт ЮникодаStrings and the Unicode Standard

Символы в строке, представляются частей кода в кодировке UTF-16, которые соответствуют Char значения.Characters in a string are represented by UTF-16 encoded code units, which correspond to Char values.

Каждый символ в строке имеет категории символов связанные Юникода, представленный в .NET с UnicodeCategory перечисления.Each character in a string has an associated Unicode character category, which is represented in .NET by the UnicodeCategory enumeration. Категория символ или суррогатную пару можно определить путем вызова CharUnicodeInfo.GetUnicodeCategory метод.The category of a character or a surrogate pair can be determined by calling the CharUnicodeInfo.GetUnicodeCategory method.

.NET поддерживает собственную таблицу символов с соответствующими категориями, которая гарантирует, что конкретные реализации .NET будут возвращать одни и те же данные по категориям символов на разных платформах..NET maintains its own table of characters and their corresponding categories, which ensures that a specific version of a .NET implementation running on different platforms returns identical character category information. В .NET Core на Linux и macOS сведения о категориях символов предоставляются библиотеками International Components for Unicode.On .NET Core running on Linux and macOS, character category information is provided by International Components for Unicode libraries.

В следующей таблице перечислены версии .NET и версии стандарта Юникод, на котором основаны их категории символов.The following table lists .NET versions and the versions of the Unicode Standard on which their character categories are based.

Версия .NET.NET version Версия стандарта ЮникодVersion of the Unicode Standard
.NET Framework 1.1.NET Framework 1.1 Стандарт Юникод, версия 4.0.0The Unicode Standard, Version 4.0.0
.NET Framework 2.0.NET Framework 2.0 Стандарт Юникод, версия 5.0.0The Unicode Standard, Version 5.0.0
.NET Framework 3,5.NET Framework 3.5 Стандарт Юникод, версия 5.0.0The Unicode Standard, Version 5.0.0
.NET Framework 4.NET Framework 4 Стандарт Юникод, версия 5.0.0The Unicode Standard, Version 5.0.0
.NET Framework 4,5.NET Framework 4.5 Стандарт Юникод, версия 6.3.0The Unicode Standard, Version 6.3.0
.NET Framework 4.51.NET Framework 4.51 Стандарт Юникод, версия 6.3.0The Unicode Standard, Version 6.3.0
.NET Framework 4.52.NET Framework 4.52 Стандарт Юникод, версия 6.3.0The Unicode Standard, Version 6.3.0
.NET Framework 4.6.NET Framework 4.6 Стандарт Юникод, версия 6.3.0The Unicode Standard, Version 6.3.0
.NET Framework 4.61.NET Framework 4.61 Стандарт Юникод, версия 6.3.0The Unicode Standard, Version 6.3.0
.NET Framework 4.6.2 и более поздние версии.NET Framework 4.6.2 and later versions Стандарт Юникод, версия 8.0.0The Unicode Standard, Version 8.0.0
.NET Core (все версии).NET Core (all versions) Стандарт Юникод, версия 8.0.0The Unicode Standard, Version 8.0.0

Кроме того платформа .NET поддерживает сравнения строк и сортировку на основе Юникода стандарта.In addition, .NET supports string comparison and sorting based on the Unicode standard. В версиях .NET Framework с помощью .NET Framework 4.NET Framework 4, .NET Framework поддерживает собственную таблицу строковых данных.In versions of the .NET Framework through the .NET Framework 4.NET Framework 4, the .NET Framework maintains its own table of string data. Это справедливо также для версии платформы .NET Framework, начиная с .NET Framework 4.5.NET Framework 4.5 под управлением Windows 7.This is also true of versions of the .NET Framework starting with the .NET Framework 4.5.NET Framework 4.5 running on Windows 7. Начиная с .NET Framework 4.5.NET Framework 4.5 под управлением Windows 8 и более поздних версиях операционной системы Windows, среда выполнения делегаты строка сравнения и сортировки в операционную систему.Starting with the .NET Framework 4.5.NET Framework 4.5 running on Window 8 and later versions of the Windows operating system, the runtime delegates string comparison and sorting operations to the operating system. Сравнение строк в .NET Core, и сортировка данных предоставляется компанией International компоненты для Юникода библиотеки. Ниже перечислены версии платформы .NET и версии стандарта Юникод, на какой символ основаны сравнение и сортировка.On .NET Core, string comparison and sorting information is provided by International Components for Unicode libraries.The following table lists the versions of .NET and the versions of the Unicode Standard on which character comparison and sorting are based.

Версия .NET.NET version Версия стандарта ЮникодVersion of the Unicode Standard
.NET Framework 1.1.NET Framework 1.1 Стандарт Юникод, версия 4.0.0The Unicode Standard, Version 4.0.0
.NET Framework 2.0The .NET Framework 2.0 Стандарт Юникод, версия 5.0.0The Unicode Standard, Version 5.0.0
.NET Framework 3,5.NET Framework 3.5 Стандарт Юникод, версия 5.0.0The Unicode Standard, Version 5.0.0
.NET Framework 4.NET Framework 4 Стандарт Юникод, версия 5.0.0The Unicode Standard, Version 5.0.0
.NET Framework 4.5.NET Framework 4.5 и более поздних версий на Windows 7and later on Windows 7 Стандарт Юникод, версия 5.0.0The Unicode Standard, Version 5.0.0
.NET Framework 4.5.NET Framework 4.5 и более поздних версий на Windows 8 и более поздних операционных системах Windowsand later on Windows 8 and later Windows operating systems Стандарт Юникод, версия 6.3.0The Unicode Standard, Version 6.3.0
.NET Core (все версии).NET Core (all versions) Зависит от версии стандарта Юникода, поддерживаемой базовой операционной системой.Depends on the version of the Unicode Standard supported by the underlying operating system.

Строки и внедренные символы nullStrings and embedded null characters

В .NET String объект может содержать внедренные символы null, которые считаются частью длину строки.In .NET, a String object can include embedded null characters, which count as a part of the string's length. Тем не менее в некоторых языках, таких как C и C++, символ null указывает на конец строки; он не является частью строки и не считаются частью длину строки.However, in some languages such as C and C++, a null character indicates the end of a string; it is not considered a part of the string and is not counted as part of the string's length. Это означает, что следующие общие предположения, которые программисты C и C++ или библиотек, написанных на C или C++ могут сделать сведения о строках не непременно являются допустимыми при применении к String объектов:This means that the following common assumptions that C and C++ programmers or libraries written in C or C++ might make about strings are not necessarily valid when applied to String objects:

  • Значение, возвращенное strlen или wcslen функций не обязательно равно String.Length.The value returned by the strlen or wcslen functions does not necessarily equal String.Length.

  • Строка, созданная по strcpy_s или wcscpy_s функций не обязательно идентичен строку, созданную путем String.Copy метод.The string created by the strcpy_s or wcscpy_s functions is not necessarily identical to the string created by the String.Copy method.

Следует убедиться, что машинного кода C и C++, создающий экземпляр String объекты и код, который передается String объектов посредством вызова, не следует предполагать, что внедренный символ null отмечает конец строки.You should ensure that native C and C++ code that instantiates String objects, and code that is passed String objects through platform invoke, don't assume that an embedded null character marks the end of the string.

Когда строка сортировки (или по сравнению с), и при поиске строки внедренные символы null в строке также обрабатываются по-разному.Embedded null characters in a string are also treated differently when a string is sorted (or compared) and when a string is searched. Символы NULL учитываются при выполнении сравнения с учетом языка и региональных параметров между двумя строками, включая сравнение с использованием инвариантного языка и региональных параметров.Null characters are ignored when performing culture-sensitive comparisons between two strings, including comparisons using the invariant culture. Они учитываются только порядковые сравнения порядковыми, так и без учета регистра.They are considered only for ordinal or case-insensitive ordinal comparisons. С другой стороны, внедренные символы null всегда считаются при поиске строки с методами, например Contains, StartsWith, и IndexOf.On the other hand, embedded null characters are always considered when searching a string with methods such as Contains, StartsWith, and IndexOf.

Строки и индексыStrings and indexes

Индекс — это положение Char объекта (а не символ Юникода) в String.An index is the position of a Char object (not a Unicode character) in a String. Индекс является неотрицательным число, которое начинается с первого знака в строке, равно нулю.An index is a zero-based, nonnegative number that starts from the first position in the string, which is index position zero. Ряд методов поиска такие как IndexOf и LastIndexOf, возврата индекса символа или подстроки в экземпляре строки.A number of search methods, such as IndexOf and LastIndexOf, return the index of a character or substring in the string instance.

Chars[Range] Свойство позволяет получить доступ к отдельным Char объекты по их позиции индекса в строке.The Chars[Range] property lets you access individual Char objects by their index position in the string. Так как Chars[Range] свойство является свойством по умолчанию (в Visual Basic) или индексатор (для C#), вы можете получить доступ к отдельные Char объектов в строке, используя следующий код.Because the Chars[Range] property is the default property (in Visual Basic) or the indexer (in C#), you can access the individual Char objects in a string by using code such as the following. Этот код ищет пробелы или знаки препинания в строке, чтобы определить, сколько слов, строка содержит.This code looks for white space or punctuation characters in a string to determine how many words the string contains.

using namespace System;

void main()
{
   String^ s1 = "This string consists of a single short sentence.";
   int nWords = 0;

   s1 = s1->Trim();      
   for (int ctr = 0; ctr < s1->Length; ctr++) {
         if (Char::IsPunctuation(s1[ctr]) | Char::IsWhiteSpace(s1[ctr]))
            nWords++;              
   }
   Console::WriteLine("The sentence\n   {0}\nhas {1} words.",
                     s1, nWords);           
}
// The example displays the following output: 
//       The sentence 
//          This string consists of a single short sentence. 
//       has 8 words.
string s1 = "This string consists of a single short sentence.";
int nWords = 0;

s1 = s1.Trim();      
for (int ctr = 0; ctr < s1.Length; ctr++) {
   if (Char.IsPunctuation(s1[ctr]) | Char.IsWhiteSpace(s1[ctr]))
      nWords++;              
}
Console.WriteLine("The sentence\n   {0}\nhas {1} words.",
                  s1, nWords);                                                                     
// The example displays the following output:
//       The sentence
//          This string consists of a single short sentence.
//       has 8 words.
Module Example
   Public Sub Main()
      Dim s1 As String = "This string consists of a single short sentence."
      Dim nWords As Integer = 0

      s1 = s1.Trim()      
      For ctr As Integer = 0 To s1.Length - 1
         If Char.IsPunctuation(s1(ctr)) Or Char.IsWhiteSpace(s1(ctr)) 
            nWords += 1              
         End If   
      Next
      Console.WriteLine("The sentence{2}   {0}{2}has {1} words.",
                        s1, nWords, vbCrLf)                                                                     
   End Sub
End Module
' The example displays the following output:
'       The sentence
'          This string consists of a single short sentence.
'       has 8 words.

Так как String класс реализует IEnumerable интерфейс, можно также выполнить итерацию Char объектов в строке с помощью foreach конструкцию, как показано в следующем примере.Because the String class implements the IEnumerable interface, you can also iterate through the Char objects in a string by using a foreach construct, as the following example shows.

using namespace System;

void main()
{
   String^ s1 = "This string consists of a single short sentence.";
   int nWords = 0;

   s1 = s1->Trim();      
   for each (Char ch in s1)
   {
      if (Char::IsPunctuation(ch) | Char::IsWhiteSpace(ch))
         nWords++;              
   }
   Console::WriteLine("The sentence\n   {0}\nhas {1} words.",
                      s1, nWords);  
   Console::ReadLine();
}
// The example displays the following output: 
//       The sentence 
//          This string consists of a single short sentence. 
//       has 8 words.
string s1 = "This string consists of a single short sentence.";
int nWords = 0;

s1 = s1.Trim();      
foreach (var ch in s1) {
   if (Char.IsPunctuation(ch) | Char.IsWhiteSpace(ch))
      nWords++;              
}
Console.WriteLine("The sentence\n   {0}\nhas {1} words.",
                  s1, nWords);                                                                     
// The example displays the following output:
//       The sentence
//          This string consists of a single short sentence.
//       has 8 words.
Module Example
   Public Sub Main()
      Dim s1 As String = "This string consists of a single short sentence."
      Dim nWords As Integer = 0

      s1 = s1.Trim()      
      For Each ch In s1
         If Char.IsPunctuation(ch) Or Char.IsWhiteSpace(ch) Then 
            nWords += 1              
         End If   
      Next
      Console.WriteLine("The sentence{2}   {0}{2}has {1} words.",
                        s1, nWords, vbCrLf)                                                                     
   End Sub
End Module
' The example displays the following output:
'       The sentence
'          This string consists of a single short sentence.
'       has 8 words.

Номер индекса может не соответствовать последовательных символов Юникода, так как знак Юникода может быть закодирован несколькими Char объекта.Consecutive index values might not correspond to consecutive Unicode characters, because a Unicode character might be encoded as more than one Char object. В частности строка может содержать Многосимвольная единицы текста, которые образуются базовый символ, за следует один или несколько несамостоятельных символов или суррогатные пары.In particular, a string may contain multi-character units of text that are formed by a base character followed by one or more combining characters or by surrogate pairs. Для работы с символами Юникода, а не Char объекты, используют System.Globalization.StringInfo и TextElementEnumerator классы.To work with Unicode characters instead of Char objects, use the System.Globalization.StringInfo and TextElementEnumerator classes. В следующем примере показано различие между кодом, который работает с Char объекты и код, который работает с символами Юникода.The following example illustrates the difference between code that works with Char objects and code that works with Unicode characters. Он сравнивает число символов или элементов текста в каждое слово предложения.It compares the number of characters or text elements in each word of a sentence. Строка состоит из двух последовательностей базового символа, за которым следует символ объединения.The string includes two sequences of a base character followed by a combining character.

using namespace System;
using namespace System::Collections::Generic;
using namespace System::Globalization;

void main()
{
   // First sentence of The Mystery of the Yellow Room, by Leroux. 
   String^ opening = L"Ce n'est pas sans une certaine émotion que "+
                     L"je commence à raconter ici les aventures " +
                     L"extraordinaires de Joseph Rouletabille."; 
  
   // Character counters. 
   int nChars = 0;
   // Objects to store word count.
   List<int>^ chars = gcnew List<int>();
   List<int>^ elements = gcnew List<int>();

   for each (Char ch in opening) {
      // Skip the ' character. 
      if (ch == '\x0027') continue;

      if (Char::IsWhiteSpace(ch) | (Char::IsPunctuation(ch))) {
         chars->Add(nChars);
         nChars = 0;
      }
      else {
         nChars++;
      }
   }

   TextElementEnumerator^ te = StringInfo::GetTextElementEnumerator(opening);
   while (te->MoveNext()) {
      String^ s = te->GetTextElement();   
      // Skip the ' character. 
      if (s == "\x0027") continue;
      if ( String::IsNullOrEmpty(s->Trim()) | (s->Length == 1 && Char::IsPunctuation(Convert::ToChar(s)))) {
         elements->Add(nChars);         
         nChars = 0;
      }
      else {
         nChars++;
      }
   }

   // Display character counts.
   Console::WriteLine("{0,6} {1,20} {2,20}",
                      "Word #", "Char Objects", "Characters"); 
   for (int ctr = 0; ctr < chars->Count; ctr++) 
      Console::WriteLine("{0,6} {1,20} {2,20}",
                         ctr, chars[ctr], elements[ctr]); 
   Console::ReadLine();
}
// The example displays the following output:
//      Word #         Char Objects           Characters
//           0                    2                    2
//           1                    4                    4
//           2                    3                    3
//           3                    4                    4
//           4                    3                    3
//           5                    8                    8
//           6                    8                    7
//           7                    3                    3
//           8                    2                    2
//           9                    8                    8
//          10                    2                    1
//          11                    8                    8
//          12                    3                    3
//          13                    3                    3
//          14                    9                    9
//          15                   15                   15
//          16                    2                    2
//          17                    6                    6
//          18                   12                   12
// First sentence of The Mystery of the Yellow Room, by Leroux.
string opening = "Ce n'est pas sans une certaine émotion que "+
                 "je commence à raconter ici les aventures " +
                 "extraordinaires de Joseph Rouletabille."; 
// Character counters.
int nChars = 0;
// Objects to store word count.
List<int> chars = new List<int>();
List<int> elements = new List<int>();

foreach (var ch in opening) {
   // Skip the ' character.
   if (ch == '\u0027') continue;
        
   if (Char.IsWhiteSpace(ch) | (Char.IsPunctuation(ch))) {
      chars.Add(nChars);
      nChars = 0;
   }
   else {
      nChars++;
   }
}

System.Globalization.TextElementEnumerator te = 
   System.Globalization.StringInfo.GetTextElementEnumerator(opening);
while (te.MoveNext()) {
   string s = te.GetTextElement();   
   // Skip the ' character.
   if (s == "\u0027") continue;
   if ( String.IsNullOrEmpty(s.Trim()) | (s.Length == 1 && Char.IsPunctuation(Convert.ToChar(s)))) {
      elements.Add(nChars);         
      nChars = 0;
   }
   else {
      nChars++;
   }
}

// Display character counts.
Console.WriteLine("{0,6} {1,20} {2,20}",
                  "Word #", "Char Objects", "Characters"); 
for (int ctr = 0; ctr < chars.Count; ctr++) 
   Console.WriteLine("{0,6} {1,20} {2,20}",
                     ctr, chars[ctr], elements[ctr]); 
// The example displays the following output:
//       Word #         Char Objects           Characters
//            0                    2                    2
//            1                    4                    4
//            2                    3                    3
//            3                    4                    4
//            4                    3                    3
//            5                    8                    8
//            6                    8                    7
//            7                    3                    3
//            8                    2                    2
//            9                    8                    8
//           10                    2                    1
//           11                    8                    8
//           12                    3                    3
//           13                    3                    3
//           14                    9                    9
//           15                   15                   15
//           16                    2                    2
//           17                    6                    6
//           18                   12                   12
Imports System.Collections.Generic
Imports System.Globalization

Module Example
   Public Sub Main()
      ' First sentence of The Mystery of the Yellow Room, by Leroux.
      Dim opening As String = "Ce n'est pas sans une certaine émotion que "+
                              "je commence à raconter ici les aventures " +
                              "extraordinaires de Joseph Rouletabille." 
      ' Character counters.
      Dim nChars As Integer = 0
      ' Objects to store word count.
      Dim chars As New List(Of Integer)()
      Dim elements As New List(Of Integer)()
      
      For Each ch In opening
         ' Skip the ' character.
         If ch = ChrW(&h0027) Then Continue For
              
         If Char.IsWhiteSpace(ch) Or Char.IsPunctuation(ch) Then
            chars.Add(nChars)
            nChars = 0
         Else 
            nChars += 1
         End If
      Next

      Dim te As TextElementEnumerator = StringInfo.GetTextElementEnumerator(opening)
      Do While te.MoveNext()
         Dim s As String = te.GetTextElement()   
         ' Skip the ' character.
         If s = ChrW(&h0027) Then Continue Do
         If String.IsNullOrEmpty(s.Trim()) Or (s.Length = 1 AndAlso Char.IsPunctuation(Convert.ToChar(s))) 
            elements.Add(nChars)         
            nChars = 0
         Else 
            nChars += 1
         End If
      Loop

      ' Display character counts.
      Console.WriteLine("{0,6} {1,20} {2,20}",
                        "Word #", "Char Objects", "Characters") 
      For ctr As Integer = 0 To chars.Count - 1 
         Console.WriteLine("{0,6} {1,20} {2,20}",
                           ctr, chars(ctr), elements(ctr)) 
      Next                        
   End Sub
End Module
' The example displays the following output:
'    Word #         Char Objects           Characters
'         0                    2                    2
'         1                    4                    4
'         2                    3                    3
'         3                    4                    4
'         4                    3                    3
'         5                    8                    8
'         6                    8                    7
'         7                    3                    3
'         8                    2                    2
'         9                    8                    8
'        10                    2                    1
'        11                    8                    8
'        12                    3                    3
'        13                    3                    3
'        14                    9                    9
'        15                   15                   15
'        16                    2                    2
'        17                    6                    6
'        18                   12                   12

Этот пример работает с элементами текста с помощью StringInfo.GetTextElementEnumerator метод и TextElementEnumerator для перечисления всех текстовых элементов в строке.This example works with text elements by using the StringInfo.GetTextElementEnumerator method and the TextElementEnumerator class to enumerate all the text elements in a string. Можно также получить массив, содержащий начальный индекс каждого элемента текста, вызвав StringInfo.ParseCombiningCharacters метод.You can also retrieve an array that contains the starting index of each text element by calling the StringInfo.ParseCombiningCharacters method.

Дополнительные сведения о работе с единицы текста, а не отдельные Char значения, см. в разделе StringInfo класса.For more information about working with units of text rather than individual Char values, see the StringInfo class.

Строки NULL и пустые строкиNull strings and empty strings

Строка, который был объявлен, но не было назначено значение null.A string that has been declared but has not been assigned a value is null. Попытка вызова методов для этой строки вызывает NullReferenceException.Attempting to call methods on that string throws a NullReferenceException. Строку null отличается от пустой строкой, который является строкой, значение которого равно «» или String.Empty.A null string is different from an empty string, which is a string whose value is "" or String.Empty. В некоторых случаях передачи строку null или пустую строку в качестве аргумента в вызове метода вызывает исключение.In some cases, passing either a null string or an empty string as an argument in a method call throws an exception. Например, передав строку "null", чтобы Int32.Parse вызывает метод ArgumentNullExceptionи передать пустую строку, возникает исключение FormatException.For example, passing a null string to the Int32.Parse method throws an ArgumentNullException, and passing an empty string throws a FormatException. В других случаях аргумента метода может быть пустой строкой или пустой строкой.In other cases, a method argument can be either a null string or an empty string. Например, если вы предоставляете IFormattable реализацию для класса, вы хотите сравнить строку null и указана пустая строка с Описатель общего формата («G»).For example, if you are providing an IFormattable implementation for a class, you want to equate both a null string and an empty string with the general ("G") format specifier.

String Класс включает следующие два удобных методов, которые позволяют проверить, является ли строка null или пуст:The String class includes the following two convenience methods that enable you to test whether a string is null or empty:

  • IsNullOrEmpty, который указывает, является ли строка либо null или равно String.Empty.IsNullOrEmpty, which indicates whether a string is either null or is equal to String.Empty. Этот метод исключает необходимость использовать следующий код:This method eliminates the need to use code such as the following:

    if (str == nullptr || str->Equals(String::Empty))
    
    if (str == null || str.Equals(String.Empty))
    
    If str Is Nothing OrElse str.Equals(String.Empty) Then
    
  • IsNullOrWhiteSpace, который указывает, является ли строка null, равно String.Empty, или содержит только пробелы.IsNullOrWhiteSpace, which indicates whether a string is null, equals String.Empty, or consists exclusively of white-space characters. Этот метод исключает необходимость использовать следующий код:This method eliminates the need to use code such as the following:

    if (str == nullptr || str->Equals(String::Empty) || str->Trim()->Equals(String::Empty))
    
    if (str == null || str.Equals(String.Empty) || str.Trim().Equals(String.Empty))
    
    If str Is Nothing OrElse str.Equals(String.Empty) OrElse str.Trim().Equals(String.Empty)
    

В следующем примере используется IsNullOrEmpty метод в IFormattable.ToString реализация пользовательского Temperature класса.The following example uses the IsNullOrEmpty method in the IFormattable.ToString implementation of a custom Temperature class. Метод поддерживает строки формата «G», «C», «F» и «K».The method supports the "G", "C", "F", and "K" format strings. Если формат или пустой строкой формата строка, значение которого является null передается в метод, его значение изменяется строки формата «G».If an empty format string or a format string whose value is null is passed to the method, its value is changed to the "G" format string.

public:
   virtual String^ ToString(String^ format, IFormatProvider^ provider) 
   {
      if (String::IsNullOrEmpty(format)) format = "G";  
      if (provider == nullptr) provider = CultureInfo::CurrentCulture;
      
      switch (Convert::ToUInt16(format->ToUpperInvariant()))
      {
         // Return degrees in Celsius.    
         case 'G':
         case 'C':
            return temp.ToString("F2", provider) + L"�C";
         // Return degrees in Fahrenheit.
         case 'F': 
            return (temp * 9 / 5 + 32).ToString("F2", provider) + L"�F";
         // Return degrees in Kelvin.
         case 'K':   
            return (temp + 273.15).ToString();
         default:
            throw gcnew FormatException(
                  String::Format("The {0} format string is not supported.", 
                                 format));
      }                                   
   }
public string ToString(string format, IFormatProvider provider) 
{
   if (String.IsNullOrEmpty(format)) format = "G";  
   if (provider == null) provider = CultureInfo.CurrentCulture;
   
   switch (format.ToUpperInvariant())
   {
      // Return degrees in Celsius.    
      case "G":
      case "C":
         return temp.ToString("F2", provider) + "°C";
      // Return degrees in Fahrenheit.
      case "F": 
         return (temp * 9 / 5 + 32).ToString("F2", provider) + "°F";
      // Return degrees in Kelvin.
      case "K":   
         return (temp + 273.15).ToString();
      default:
         throw new FormatException(
               String.Format("The {0} format string is not supported.", 
                             format));
   }                                   
}
Public Overloads Function ToString(fmt As String, provider As IFormatProvider) As String _
                Implements IFormattable.ToString
   If String.IsNullOrEmpty(fmt) Then fmt = "G"  
   If provider Is Nothing Then provider = CultureInfo.CurrentCulture
   
   Select Case fmt.ToUpperInvariant()
      ' Return degrees in Celsius.    
      Case "G", "C"
         Return temp.ToString("F2", provider) + "°C"
      ' Return degrees in Fahrenheit.
      Case "F" 
         Return (temp * 9 / 5 + 32).ToString("F2", provider) + "°F"
      ' Return degrees in Kelvin.
      Case "K"   
         Return (temp + 273.15).ToString()
      Case Else
         Throw New FormatException(
               String.Format("The {0} format string is not supported.", 
                             fmt))
    End Select                                   
End Function

Неизменность и класса StringBuilderImmutability and the StringBuilder class

Объект String объект называется неизменяемый (только для чтения), так как его значение нельзя изменить после ее создания.A String object is called immutable (read-only), because its value cannot be modified after it has been created. Методы, которые могут изменить String объект на самом деле возвращается новый String объект, содержащий изменения.Methods that appear to modify a String object actually return a new String object that contains the modification.

Поскольку строки являются неизменяемыми, процедуры обработки строки, которые выполняют повторяющиеся добавлений или удалений для отображается одна строка может точные к значительному снижению производительности.Because strings are immutable, string manipulation routines that perform repeated additions or deletions to what appears to be a single string can exact a significant performance penalty. Например следующий код использует генератор случайных чисел для создания строки с 1000 символов в диапазоне 0x0001 для 0x052F.For example, the following code uses a random number generator to create a string with 1000 characters in the range 0x0001 to 0x052F. Несмотря на то, что код будет использовать объединение строк для добавления нового символа в существующую строку с именем str, фактически создает новый String объект для каждой операции объединения.Although the code appears to use string concatenation to append a new character to the existing string named str, it actually creates a new String object for each concatenation operation.

using namespace System;
using namespace System::IO;
using namespace System::Text;

void main()
{
   Random^ rnd = gcnew Random();

   String^ str = String::Empty;
   StreamWriter^ sw = gcnew StreamWriter(".\\StringFile.txt", 
                        false, Encoding::Unicode);

   for (int ctr = 0; ctr <= 1000; ctr++) {
      str += Convert::ToChar(rnd->Next(1, 0x0530)); 
      if (str->Length % 60 == 0)
         str += Environment::NewLine;          
   }                    
   sw->Write(str);
   sw->Close();
}
using System;
using System.IO;
using System.Text;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      
      string str = String.Empty;
      StreamWriter sw = new StreamWriter(@".\StringFile.txt", 
                           false, Encoding.Unicode);

      for (int ctr = 0; ctr <= 1000; ctr++) {
         str += Convert.ToChar(rnd.Next(1, 0x0530)); 
         if (str.Length % 60 == 0)
            str += Environment.NewLine;          
      }                    
      sw.Write(str);
      sw.Close();
   }
}
Imports System.IO
Imports System.Text

Module Example
   Public Sub Main()
      Dim rnd As New Random()
      
      Dim str As String = String.Empty
      Dim sw As New StreamWriter(".\StringFile.txt", 
                           False, Encoding.Unicode)

      For ctr As Integer = 0 To 1000
         str += ChrW(rnd.Next(1, &h0530)) 
         If str.Length Mod 60 = 0 Then str += vbCrLf          
      Next                    
      sw.Write(str)
      sw.Close()
   End Sub
End Module

Можно использовать StringBuilder вместо класса String класс для операций, которые вносят изменения в нескольких значения строки.You can use the StringBuilder class instead of the String class for operations that make multiple changes to the value of a string. В отличие от экземпляров String класс, StringBuilder объекты являются изменяемыми; при объединения, добавления или удаления подстрок из строки, операции выполняются на одну строку.Unlike instances of the String class, StringBuilder objects are mutable; when you concatenate, append, or delete substrings from a string, the operations are performed on a single string. После завершения изменения значения StringBuilder объекта, можно вызвать его StringBuilder.ToString метод для преобразования его в строку.When you have finished modifying the value of a StringBuilder object, you can call its StringBuilder.ToString method to convert it to a string. В следующем примере заменяется String используется в предыдущем примере для объединения 1000 случайные символы в диапазоне в 0x0001, чтобы 0x052F с StringBuilder объекта.The following example replaces the String used in the previous example to concatenate 1000 random characters in the range to 0x0001 to 0x052F with a StringBuilder object.

using namespace System;
using namespace System::IO;
using namespace System::Text;

void main()
{
   Random^ rnd = gcnew Random();

   StringBuilder^ sb = gcnew StringBuilder();
   StreamWriter^ sw = gcnew StreamWriter(".\\StringFile.txt", 
                        false, Encoding::Unicode);

   for (int ctr = 0; ctr <= 1000; ctr++) {
      sb->Append(Convert::ToChar(rnd->Next(1, 0x0530))); 
      if (sb->Length % 60 == 0)
         sb->AppendLine();          
   }                    
   sw->Write(sb->ToString());
   sw->Close();
}
using System;
using System.IO;
using System.Text;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      StringBuilder sb = new StringBuilder();
      StreamWriter sw = new StreamWriter(@".\StringFile.txt", 
                                         false, Encoding.Unicode);

      for (int ctr = 0; ctr <= 1000; ctr++) {
         sb.Append(Convert.ToChar(rnd.Next(1, 0x0530))); 
         if (sb.Length % 60 == 0)
            sb.AppendLine();          
      }                    
      sw.Write(sb.ToString());
      sw.Close();
   }
}
Imports System.IO
Imports System.Text

Module Example
   Public Sub Main()
      Dim rnd As New Random()
      Dim sb As New StringBuilder()
      Dim sw As New StreamWriter(".\StringFile.txt", 
                                 False, Encoding.Unicode)

      For ctr As Integer = 0 To 1000
         sb.Append(ChrW(rnd.Next(1, &h0530))) 
         If sb.Length Mod 60 = 0 Then sb.AppendLine()          
      Next                    
      sw.Write(sb.ToString())
      sw.Close()
   End Sub
End Module

Порядковый номер и операций с учетом языка и региональных параметровOrdinal vs. culture-sensitive operations

Членами String класс оперируют порядковый номер или культуры (лингвистические) String объекта.Members of the String class perform either ordinal or culture-sensitive (linguistic) operations on a String object. Порядковые операции выполняются над числовыми значениями каждого Char объекта.An ordinal operation acts on the numeric value of each Char object. Операция с учетом языка и региональных параметров при обнаружении значение String объекта и принимает о регистре, сортировку, форматирование и правила синтаксического анализа в учетную запись.A culture-sensitive operation acts on the value of the String object, and takes culture-specific casing, sorting, formatting, and parsing rules into account. Операций с учетом языка и региональных параметров, выполняются в контексте объявленные явным образом языка и региональных параметров или неявное текущего языка и региональных параметров.Culture-sensitive operations execute in the context of an explicitly declared culture or the implicit current culture. Два вида операций может дать очень разные результаты, если они выполняются в ту же строку.The two kinds of operations can produce very different results when they are performed on the same string.

.NET также поддерживает операции со строками без учета языка и региональных параметров лингвистические с использованием инвариантных региональных параметров (CultureInfo.InvariantCulture), который слабо зависит от региональных параметров зависит от региона английский язык..NET also supports culture-insensitive linguistic string operations by using the invariant culture (CultureInfo.InvariantCulture), which is loosely based on the culture settings of the English language independent of region. В отличие от других System.Globalization.CultureInfo параметров, параметров инвариантного языка и региональных параметров будут гарантированно остаются согласованными на одном компьютере, из системы к системе и всех версий платформы .NET.Unlike other System.Globalization.CultureInfo settings, the settings of the invariant culture are guaranteed to remain consistent on a single computer, from system to system, and across versions of .NET. Инвариантного языка и региональных параметров может быть материал в качестве своего рода черным ящиком, который обеспечивает стабильность сравнения строк и упорядочения для всех языков и региональных параметров.The invariant culture can be seen as a kind of black box that ensures stability of string comparisons and ordering across all cultures.

Важно!

Если приложение принимает решение безопасности о символического идентификатора, такие как имя файла или именованный канал, или о материализованных данных, таких как текстовые данные в XML-файл, операцию следует использовать сравнение по порядковому номеру вместо сравнение с учетом языка и региональных параметров.If your application makes a security decision about a symbolic identifier such as a file name or named pipe, or about persisted data such as the text-based data in an XML file, the operation should use an ordinal comparison instead of a culture-sensitive comparison. Это обусловлено тем, учитывающего культуру сравнения могут выдавать различные результаты в зависимости от языка и региональных параметров, по сути, тогда как порядковое сравнение зависит только от двоичное значение сравниваемых символом.This is because a culture-sensitive comparison can yield different results depending on the culture in effect, whereas an ordinal comparison depends solely on the binary value of the compared characters.

Важно!

Большинство методов, которые выполняют операции со строками включают перегрузку, имеющую параметр типа StringComparison, который позволяет указать, выполняет ли метод операцию порядковыми, так и от культуры.Most methods that perform string operations include an overload that has a parameter of type StringComparison, which enables you to specify whether the method performs an ordinal or culture-sensitive operation. Как правило следует вызывать эту перегрузку, чтобы сделать назначение метода вызова.In general, you should call this overload to make the intent of your method call clear. Советы и рекомендации по использованию порядковый номер, с учетом языка и региональных параметров операции со строками, см. в разделе советы и рекомендации по использованию строк.For best practices and guidance for using ordinal and culture-sensitive operations on strings, see Best Practices for Using Strings.

Операции для регистр, синтаксического анализа и форматирования, сравнение и сортировка, и проверка на равенство может быть либо порядковый номер или зависящие от культуры.Operations for casing, parsing and formatting, comparison and sorting, and testing for equality can be either ordinal or culture-sensitive. В следующих разделах рассматриваются каждой категории операции.The following sections discuss each category of operation.

Совет

Следует всегда вызывать перегрузки метода, который делает назначение метода вызова.You should always call a method overload that makes the intent of your method call clear. Например, вместо вызова метода Compare(String, String) метод, чтобы выполнить сравнение с учетом языка и региональных параметров двух строк с помощью правил текущего языка и региональных параметров, следует вызывать Compare(String, String, StringComparison) метод со значением StringComparison.CurrentCulture для comparisonType аргумент.For example, instead of calling the Compare(String, String) method to perform a culture-sensitive comparison of two strings by using the conventions of the current culture, you should call the Compare(String, String, StringComparison) method with a value of StringComparison.CurrentCulture for the comparisonType argument. Дополнительные сведения см. в разделе Рекомендации по использованию строк.For more information, see Best Practices for Using Strings.

Можно скачать таблицы коэффициентов сортировки — набор текстовых файлов, которые содержат сведения о весовых коэффициентах символов, используемых в операциях сортировки и сравнения для операционных систем Windows, а также таблицу параметров сортировки по умолчанию для элементов Юникод — таблицу весовых коэффициентов сортировки для Linux и macOS.You can download the Sorting Weight Tables, a set of text files that contain information on the character weights used in sorting and comparison operations for Windows operating systems, and the Default Unicode Collation Element Table, the sort weight table for Linux and macOS.

РегистрCasing

Правила определения регистра для определения способа изменить регистр символа Юникода; например из нижнего регистра в верхний регистр.Casing rules determine how to change the capitalization of a Unicode character; for example, from lowercase to uppercase. Часто операция регистр выполняется перед сравнения строк.Often, a casing operation is performed before a string comparison. Например строки могут быть преобразованы в верхний регистр, таким образом, чтобы его можно сравнить с другим строку в верхнем регистре.For example, a string might be converted to uppercase so that it can be compared with another uppercase string. Можно преобразовать символы в строке в нижний регистр, вызвав ToLower или ToLowerInvariant метод и их можно преобразовать в верхний регистр, вызвав ToUpper или ToUpperInvariant метод.You can convert the characters in a string to lowercase by calling the ToLower or ToLowerInvariant method, and you can convert them to uppercase by calling the ToUpper or ToUpperInvariant method. Кроме того, можно использовать TextInfo.ToTitleCase метод для преобразования строки в заглавные символы.In addition, you can use the TextInfo.ToTitleCase method to convert a string to title case.

Примечание

Выполнение .NET Core в только в системах Linux и macOS: При использовании параметров сортировки для языков и региональных параметров C и Posix всегда учитывается регистр, так как в этом случае Юникод не поддерживается..NET Core running on Linux and macOS systems only: The collation behavior for the C and Posix cultures is always case-sensitive because these cultures do not use the expected Unicode collation order. Мы не рекомендуем использовать язык и региональные параметры, выбранные для C или Posix, для выполнения операций сортировки с учетом языка и региональных параметров, но без учета регистра.We recommend that you use a culture other than C or Posix for performing culture-sensitive, case-insensitive sorting operations.

Регистр операций может быть на основе правил текущего языка и региональных параметров, заданных региональных параметров или инвариантного языка и региональных параметров.Casing operations can be based on the rules of the current culture, a specified culture, or the invariant culture. Поскольку сопоставление регистра могут различаться в зависимости от языка и региональных параметров, результатов операций регистр зависит от языка и региональных параметров.Because case mappings can vary depending on the culture used, the result of casing operations can vary based on culture. Фактический различия в регистре ключевых имеют три типа:The actual differences in casing are of three kinds:

  • Различия в сопоставления в LATIN CAPITAL LETTER I (U + 0049), LATIN НЕБОЛЬШОЙ буква I (U + 0069), LATIN CAPITAL LETTER I с ТОЧКОЙ выше (U + 0130) и LATIN НЕБОЛЬШОЙ буквы без ТОЧКИ I (U + 0131).Differences in the case mapping of LATIN CAPITAL LETTER I (U+0049), LATIN SMALL LETTER I (U+0069), LATIN CAPITAL LETTER I WITH DOT ABOVE (U+0130), and LATIN SMALL LETTER DOTLESS I (U+0131). В az-Latn-AZ (латиница, Азербайджан) языков и региональных параметров и tr-TR (турецкий (Турция)), tr, az и az-Latn нейтральные культуры, эквивалент LATIN ЗАГЛАВНОЙ буквы I в нижнем регистре — LATIN НЕБОЛЬШОЙ буквы без ТОЧКИ I и эквивалент регистре LATIN НЕБОЛЬШОЙ буквы I – ПРОПИСНЫЕ ЛАТИНСКИЕ БУКВЫ I С ТОЧКОЙ ВЫШЕ.In the tr-TR (Turkish (Turkey)) and az-Latn-AZ (Azerbaijan, Latin) cultures, and in the tr, az, and az-Latn neutral cultures, the lowercase equivalent of LATIN CAPITAL LETTER I is LATIN SMALL LETTER DOTLESS I, and the uppercase equivalent of LATIN SMALL LETTER I is LATIN CAPITAL LETTER I WITH DOT ABOVE. В других культурах в том числе инвариантных региональных параметров, LATIN НЕБОЛЬШОЙ буквы I и я являются эквивалентами строчные и прописные буквы LATIN.In all other cultures, including the invariant culture, LATIN SMALL LETTER I and LATIN CAPITAL LETTER I are lowercase and uppercase equivalents.

    В следующем примере показано как сравнения строк предназначен для предотвращения доступа к файловой системе может завершиться ошибкой, если он основывается на сравнении регистр с учетом языка и региональных параметров.The following example demonstrates how a string comparison designed to prevent file system access can fail if it relies on a culture-sensitive casing comparison. (Правила регистра инвариантного языка и региональных параметров должно быть использовано.)(The casing conventions of the invariant culture should have been used.)

    using System;
    using System.Globalization;
    using System.Threading;
    
    public class Example
    {
       const string disallowed = "file";
       
       public static void Main()
       {
          IsAccessAllowed(@"FILE:\\\c:\users\user001\documents\FinancialInfo.txt");
       }
    
       private static void IsAccessAllowed(String resource)
       {
          CultureInfo[] cultures = { CultureInfo.CreateSpecificCulture("en-US"),
                                     CultureInfo.CreateSpecificCulture("tr-TR") };
          String scheme = null;
          int index = resource.IndexOfAny( new Char[] { '\\', '/' } );
          if (index > 0) 
             scheme = resource.Substring(0, index - 1);
    
          // Change the current culture and perform the comparison.
          foreach (var culture in cultures) {
             Thread.CurrentThread.CurrentCulture = culture;
             Console.WriteLine("Culture: {0}", CultureInfo.CurrentCulture.DisplayName);
             Console.WriteLine(resource);
             Console.WriteLine("Access allowed: {0}", 
                               ! String.Equals(disallowed, scheme, StringComparison.CurrentCultureIgnoreCase));      
             Console.WriteLine();
          }   
       }
    }
    // The example displays the following output:
    //       Culture: English (United States)
    //       FILE:\\\c:\users\user001\documents\FinancialInfo.txt
    //       Access allowed: False
    //       
    //       Culture: Turkish (Turkey)
    //       FILE:\\\c:\users\user001\documents\FinancialInfo.txt
    //       Access allowed: True
    
    Imports System.Globalization
    Imports System.Threading
    
    Module Example
       Const disallowed = "file"
       
       Public Sub Main()
          IsAccessAllowed("FILE:\\\c:\users\user001\documents\FinancialInfo.txt")
       End Sub
    
       Private Sub IsAccessAllowed(resource As String)
          Dim cultures() As CultureInfo = { CultureInfo.CreateSpecificCulture("en-US"),
                                            CultureInfo.CreateSpecificCulture("tr-TR") }
          Dim scheme As String = Nothing
          Dim index As Integer = resource.IndexOfAny( {"\"c, "/"c })
          If index > 0 Then scheme = resource.Substring(0, index - 1)
    
          ' Change the current culture and perform the comparison.
          For Each culture In cultures
             Thread.CurrentThread.CurrentCulture = culture
             Console.WriteLine("Culture: {0}", CultureInfo.CurrentCulture.DisplayName)
             Console.WriteLine(resource)
             Console.WriteLine("Access allowed: {0}", 
                               Not String.Equals(disallowed, scheme, StringComparison.CurrentCultureIgnoreCase))      
             Console.WriteLine()
          Next   
       End Sub      
    End Module
    ' The example displays the following output:
    '       Culture: English (United States)
    '       FILE:\\\c:\users\user001\documents\FinancialInfo.txt
    '       Access allowed: False
    '       
    '       Culture: Turkish (Turkey)
    '       FILE:\\\c:\users\user001\documents\FinancialInfo.txt
    '       Access allowed: True
    
  • Различия в сопоставление регистра инвариантного языка и региональных параметров и всех других языков и региональных параметров.Differences in case mappings between the invariant culture and all other cultures. В таких случаях с помощью правила учета регистра инвариантного языка и региональных параметров, чтобы изменить символ в верхний или нижний возвращает тот же символ.In these cases, using the casing rules of the invariant culture to change a character to uppercase or lowercase returns the same character. Для всех других языков и региональных параметров он возвращает другой символ.For all other cultures, it returns a different character. В следующей таблице перечислены некоторые из затронутых символов.Some of the affected characters are listed in the following table.

    ЗнакCharacter При измененииIf changed to ReturnsReturns
    МКМ ВХОДА (U + 00B5)MICRON SIGN (U+00B5) Прописные буквыUppercase ЦЕНТР ОБНОВЛЕНИЯ МАЙКРОСОФТ ЗАГЛАВНУЮ ГРЕЧЕСКУЮ БУКВУ (U +-39C)GREEK CAPITAL LETTER MU (U+-39C)
    ПРОПИСНЫЕ ЛАТИНСКИЕ БУКВЫ I С ТОЧКОЙ ВЫШЕ (U + 0130)LATIN CAPITAL LETTER I WITH DOT ABOVE (U+0130) Строчные буквыLowercase ЛАТИНИЦА МАЛОГО БУКВЫ I (U + 0069)LATIN SMALL LETTER I (U+0069)
    КРАТКУЮ ЛАТИНСКАЯ СТРОЧНАЯ БУКВА I (U + 0131)LATIN SMALL LETTER DOTLESS I (U+0131) Прописные буквыUppercase ПРОПИСНЫЕ ЛАТИНСКИЕ БУКВЫ I (U + 0049)LATIN CAPITAL LETTER I (U+0049)
    ЛАТИНСКАЯ СТРОЧНАЯ БУКВА LONG S (U + 017F)LATIN SMALL LETTER LONG S (U+017F) Прописные буквыUppercase ПРОПИСНАЯ ЛАТИНСКАЯ БУКВА S (U + 0053)LATIN CAPITAL LETTER S (U+0053)
    ПРОПИСНАЯ ЛАТИНСКАЯ БУКВА D С СТРОЧНАЯ БУКВА Z С ГАЛОЧКОЙ (U + 01C 5)LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON (U+01C5) Строчные буквыLowercase ЛАТИНСКАЯ СТРОЧНАЯ БУКВА DZ С ГАЛОЧКОЙ (U + 01C 6)LATIN SMALL LETTER DZ WITH CARON (U+01C6)
    ГРЕЧЕСКИЙ YPOGEGRAMMENI ОБЪЕДИНЕНИЯ (U + 0345)COMBINING GREEK YPOGEGRAMMENI (U+0345) Прописные буквыUppercase IOTA ЗАГЛАВНУЮ ГРЕЧЕСКУЮ БУКВУ (U + 0399)GREEK CAPITAL LETTER IOTA (U+0399)
  • Различия в сопоставление регистра из пары заглавных букв в диапазоне символов ASCII.Differences in case mappings of two-letter mixed-case pairs in the ASCII character range. В большинстве языков и региональных параметров пару заглавных букв равно эквивалентное пар верхний или нижний регистр букв.In most cultures, a two-letter mixed-case pair is equal to the equivalent two-letter uppercase or lowercase pair. Это не относится к пары следующих языков и региональных параметров, в следующих двух букв, так как в каждом случае они сравниваются с диграф:This is not true for the following two-letter pairs in the following cultures, because in each case they are compared to a digraph:

    • «lJ» и «nJ» в культуре, hr-HR (Хорватский (Хорватия))."lJ" and "nJ" in the hr-HR (Croatian (Croatia)) culture.

    • «cH» в cs-CZ (чешский (Чешская Республика)) и sk-SK (словацкий (Словакия)) языков и региональных параметров."cH" in the cs-CZ (Czech (Czech Republic)) and sk-SK (Slovak (Slovakia)) cultures.

    • «aA» в культуре da-DK (датский (Дания))."aA" in the da-DK (Danish (Denmark)) culture.

    • «cS», «dZ», «dZS», «nY», «sZ», «tY» и «zS» в культуре, hu-HU (Венгерский (Венгрия))."cS", "dZ", "dZS", "nY", "sZ", "tY", and "zS" in the hu-HU (Hungarian (Hungary)) culture.

    • «cH» и «lL» в язык и региональные параметры es-ES_tradnl (испанский (Испания, традиционная сортировка))."cH" and "lL" in the es-ES_tradnl (Spanish (Spain, Traditional Sort)) culture.

    • «cH», «gI», «kH», «nG» «центр уведомлений», «pH», «qU ", «tH» и «tR» в культуре vi-VN (вьетнамский (Вьетнам))."cH", "gI", "kH", "nG" "nH", "pH", "qU', "tH", and "tR" in the vi-VN (Vietnamese (Vietnam)) culture.

    Тем не менее не передается столкнуться с ситуацией, в котором учитывающего культуру сравнения этих пар создает проблемы, в том случае, поскольку эти пары происходят нечасто в фиксированных строк или идентификаторов.However, it is unusual to encounter a situation in which a culture-sensitive comparison of these pairs creates problems, because these pairs are uncommon in fixed strings or identifiers.

Следующий пример иллюстрирует некоторые различия в правила определения регистра для языков и региональных параметров при преобразовании строки в верхний регистр.The following example illustrates some of the differences in casing rules between cultures when converting strings to uppercase.

using namespace System;
using namespace System::Globalization;
using namespace System::IO;

String^ ShowHexValue(String^ s);

void main()
{
   StreamWriter^ sw = gcnew StreamWriter(".\\case.txt");   
   array<String^>^ words = gcnew array<String^> { L"file", L"sıfır", L"Dženana" };
   array<CultureInfo^>^ cultures = gcnew array<CultureInfo^> { CultureInfo::InvariantCulture, 
                                                               gcnew CultureInfo("en-US"),  
                                                               gcnew CultureInfo("tr-TR") };

   for each (String^ word in words) {
      sw->WriteLine("{0}:", word);
      for each (CultureInfo^ culture in cultures) {
         String^ name = String::IsNullOrEmpty(culture->Name) ? 
                              "Invariant" : culture->Name;
         String^ upperWord = word->ToUpper(culture);
         sw->WriteLine("   {0,10}: {1,7} {2, 38}", name, 
                        upperWord, ShowHexValue(upperWord));

      }
      sw->WriteLine();  
   }
   sw->Close();
}

String^ ShowHexValue(String^ s)
{
   String^ retval = nullptr;
   for each (Char ch in s) {
      array<Byte>^ bytes = BitConverter::GetBytes(ch);
      retval += String::Format("{0:X2} {1:X2} ", bytes[1], bytes[0]);     
   }
   return retval;
} 
// The example displays the following output: 
//    file: 
//        Invariant:    FILE               00 46 00 49 00 4C 00 45  
//            en-US:    FILE               00 46 00 49 00 4C 00 45  
//            tr-TR:    FİLE               00 46 01 30 00 4C 00 45  
//     
//    sıfır: 
//        Invariant:   SıFıR         00 53 01 31 00 46 01 31 00 52  
//            en-US:   SIFIR         00 53 00 49 00 46 00 49 00 52  
//            tr-TR:   SIFIR         00 53 00 49 00 46 00 49 00 52  
//     
//    Dženana: 
//        Invariant:  DžENANA   01 C5 00 45 00 4E 00 41 00 4E 00 41  
//            en-US:  DŽENANA   01 C4 00 45 00 4E 00 41 00 4E 00 41  
//            tr-TR:  DŽENANA   01 C4 00 45 00 4E 00 41 00 4E 00 41 
using System;
using System.Globalization;
using System.IO;

public class Example
{
   public static void Main()
   {
      StreamWriter sw = new StreamWriter(@".\case.txt");   
      string[] words = { "file", "sıfır", "Dženana" };
      CultureInfo[] cultures = { CultureInfo.InvariantCulture, 
                                 new CultureInfo("en-US"),  
                                 new CultureInfo("tr-TR") };

      foreach (var word in words) {
         sw.WriteLine("{0}:", word);
         foreach (var culture in cultures) {
            string name = String.IsNullOrEmpty(culture.Name) ? 
                                 "Invariant" : culture.Name;
            string upperWord = word.ToUpper(culture);
            sw.WriteLine("   {0,10}: {1,7} {2, 38}", name, 
                         upperWord, ShowHexValue(upperWord));
     
         }
         sw.WriteLine();  
      }
      sw.Close();
   }

   private static string ShowHexValue(string s)
   {
      string retval = null;
      foreach (var ch in s) {
         byte[] bytes = BitConverter.GetBytes(ch);
         retval += String.Format("{0:X2} {1:X2} ", bytes[1], bytes[0]);     
      }
      return retval;
   } 
}
// The example displays the following output:
//    file:
//        Invariant:    FILE               00 46 00 49 00 4C 00 45 
//            en-US:    FILE               00 46 00 49 00 4C 00 45 
//            tr-TR:    FİLE               00 46 01 30 00 4C 00 45 
//    
//    sıfır:
//        Invariant:   SıFıR         00 53 01 31 00 46 01 31 00 52 
//            en-US:   SIFIR         00 53 00 49 00 46 00 49 00 52 
//            tr-TR:   SIFIR         00 53 00 49 00 46 00 49 00 52 
//    
//    Dženana:
//        Invariant:  DžENANA   01 C5 00 45 00 4E 00 41 00 4E 00 41 
//            en-US:  DŽENANA   01 C4 00 45 00 4E 00 41 00 4E 00 41 
//            tr-TR:  DŽENANA   01 C4 00 45 00 4E 00 41 00 4E 00 41 
Imports System.Globalization
Imports System.IO

Module Example
   Public Sub Main()
      Dim sw As New StreamWriter(".\case.txt")   
      Dim words As String() = { "file", "sıfır", "Dženana" }
      Dim cultures() As CultureInfo = { CultureInfo.InvariantCulture, 
                                        New CultureInfo("en-US"),  
                                        New CultureInfo("tr-TR") }

      For Each word In words
         sw.WriteLine("{0}:", word)
         For Each culture In cultures
            Dim name As String = If(String.IsNullOrEmpty(culture.Name),  
                                 "Invariant", culture.Name)
            Dim upperWord As String = word.ToUpper(culture)
            sw.WriteLine("   {0,10}: {1,7} {2, 38}", name, 
                         upperWord, ShowHexValue(upperWord))
     
         Next
         sw.WriteLine()  
      Next
      sw.Close()
   End Sub

   Private Function ShowHexValue(s As String) As String
      Dim retval As String = Nothing
      For Each ch In s
         Dim bytes() As Byte = BitConverter.GetBytes(ch)
         retval += String.Format("{0:X2} {1:X2} ", bytes(1), bytes(0))     
      Next
      Return retval
   End Function
End Module
' The example displays the following output:
'    file:
'        Invariant:    FILE               00 46 00 49 00 4C 00 45 
'            en-US:    FILE               00 46 00 49 00 4C 00 45 
'            tr-TR:    FİLE               00 46 01 30 00 4C 00 45 
'    
'    sıfır:
'        Invariant:   SıFıR         00 53 01 31 00 46 01 31 00 52 
'            en-US:   SIFIR         00 53 00 49 00 46 00 49 00 52 
'            tr-TR:   SIFIR         00 53 00 49 00 46 00 49 00 52 
'    
'    Dženana:
'        Invariant:  DžENANA   01 C5 00 45 00 4E 00 41 00 4E 00 41 
'            en-US:  DŽENANA   01 C4 00 45 00 4E 00 41 00 4E 00 41 
'            tr-TR:  DŽENANA   01 C4 00 45 00 4E 00 41 00 4E 00 41  

Синтаксического анализа и форматированияParsing and formatting

Форматирование и разбор — это обратная операции.Formatting and parsing are inverse operations. Правила форматирования определяют способ преобразования значение, например даты и времени или номер, в строковое представление, в то время как синтаксического анализа правила определяют способ преобразования строкового представления в значение даты и времени.Formatting rules determine how to convert a value, such as a date and time or a number, to its string representation, whereas parsing rules determine how to convert a string representation to a value such as a date and time. Форматирования и разбора правила зависят от национальные стандарты.Both formatting and parsing rules are dependent on cultural conventions. В следующем примере показано неоднозначности, которые могут возникнуть при интерпретации строки даты конкретного языка и региональных параметров.The following example illustrates the ambiguity that can arise when interpreting a culture-specific date string. Не зная соглашений для языка и региональных параметров, который использовался для создания строки даты, не сможете узнать ли 03/01/2011 г., 3/1/2011 и 01/03/2011 представляют 3 января 2011 г. или 1 марта 2011 г.Without knowing the conventions of the culture that was used to produce a date string, it is not possible to know whether 03/01/2011, 3/1/2011, and 01/03/2011 represent January 3, 2011 or March 1, 2011.

using namespace System;
using namespace System::Globalization;

void main()
{
   DateTime^ date = gcnew DateTime(2011, 3, 1);
   array<CultureInfo^>^ cultures = gcnew array<CultureInfo^> { CultureInfo::InvariantCulture, 
                                                               gcnew CultureInfo("en-US"), 
                                                               gcnew CultureInfo("fr-FR") };

   for each (CultureInfo^ culture in cultures)
      Console::WriteLine("{0,-12} {1}", String::IsNullOrEmpty(culture->Name) ?
                        "Invariant" : culture->Name, 
                        date->ToString("d", culture));                                    
}
// The example displays the following output: 
//       Invariant    03/01/2011 
//       en-US        3/1/2011 
//       fr-FR        01/03/2011
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime date = new DateTime(2011, 3, 1);
      CultureInfo[] cultures = { CultureInfo.InvariantCulture, 
                                 new CultureInfo("en-US"), 
                                 new CultureInfo("fr-FR") };

      foreach (var culture in cultures)
         Console.WriteLine("{0,-12} {1}", String.IsNullOrEmpty(culture.Name) ?
                           "Invariant" : culture.Name, 
                           date.ToString("d", culture));                                    
   }
}
// The example displays the following output:
//       Invariant    03/01/2011
//       en-US        3/1/2011
//       fr-FR        01/03/2011
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dat As Date = #3/1/2011#
      Dim cultures() As CultureInfo = { CultureInfo.InvariantCulture, 
                                        New CultureInfo("en-US"), 
                                        New CultureInfo("fr-FR") }

      For Each culture In cultures
         Console.WriteLine("{0,-12} {1}", If(String.IsNullOrEmpty(culture.Name), 
                           "Invariant", culture.Name), 
                           dat.ToString("d", culture))
      Next                                                         
   End Sub
End Module
' The example displays the following output:
'       Invariant    03/01/2011
'       en-US        3/1/2011
'       fr-FR        01/03/2011

Точно так же как показано в следующем примере, одну строку может привести к другие дни, в зависимости от языка и региональных параметров, соглашения о которых используются в операции синтаксического анализа.Similarly, as the following example shows, a single string can produce different dates depending on the culture whose conventions are used in the parsing operation.

using namespace System;
using namespace System::Globalization;

void main()
{
   String^ dateString = "07/10/2011";
   array<CultureInfo^>^ cultures = gcnew array<CultureInfo^> { CultureInfo::InvariantCulture, 
                                                               CultureInfo::CreateSpecificCulture("en-GB"), 
                                                               CultureInfo::CreateSpecificCulture("en-US") };
   Console::WriteLine("{0,-12} {1,10} {2,8} {3,8}\n", "Date String", "Culture", 
                                                "Month", "Day");
   for each (CultureInfo^ culture in cultures) {
      DateTime date = DateTime::Parse(dateString, culture);
      Console::WriteLine("{0,-12} {1,10} {2,8} {3,8}", dateString, 
                        String::IsNullOrEmpty(culture->Name) ?
                        "Invariant" : culture->Name, 
                        date.Month, date.Day);
   }                      
}
// The example displays the following output: 
//       Date String     Culture    Month      Day 
//        
//       07/10/2011    Invariant        7       10 
//       07/10/2011        en-GB       10        7 
//       07/10/2011        en-US        7       10

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string dateString = "07/10/2011";
      CultureInfo[] cultures = { CultureInfo.InvariantCulture, 
                                 CultureInfo.CreateSpecificCulture("en-GB"), 
                                 CultureInfo.CreateSpecificCulture("en-US") };
      Console.WriteLine("{0,-12} {1,10} {2,8} {3,8}\n", "Date String", "Culture", 
                                                 "Month", "Day");
      foreach (var culture in cultures) {
         DateTime date = DateTime.Parse(dateString, culture);
         Console.WriteLine("{0,-12} {1,10} {2,8} {3,8}", dateString, 
                           String.IsNullOrEmpty(culture.Name) ?
                           "Invariant" : culture.Name, 
                           date.Month, date.Day);
      }                      
   }
}
// The example displays the following output:
//       Date String     Culture    Month      Day
//       
//       07/10/2011    Invariant        7       10
//       07/10/2011        en-GB       10        7
//       07/10/2011        en-US        7       10
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateString As String = "07/10/2011"
      Dim cultures() As CultureInfo = { CultureInfo.InvariantCulture, 
                                        CultureInfo.CreateSpecificCulture("en-GB"), 
                                        CultureInfo.CreateSpecificCulture("en-US") }
      Console.WriteLine("{0,-12} {1,10} {2,8} {3,8}", "Date String", "Culture", 
                                                 "Month", "Day")
      Console.WriteLine()                                                 
      For Each culture In cultures
         Dim dat As Date = DateTime.Parse(dateString, culture)
         Console.WriteLine("{0,-12} {1,10} {2,8} {3,8}", dateString, 
                           If(String.IsNullOrEmpty(culture.Name), 
                           "Invariant", culture.Name), 
                           dat.Month, dat.Day)
      Next
   End Sub
End Module
' The example displays the following output:
'       Date String     Culture    Month      Day
'       
'       07/10/2011    Invariant        7       10
'       07/10/2011        en-GB       10        7
'       07/10/2011        en-US        7       10

Сравнение и сортировка строкString comparison and sorting

Соглашения для сравнения и сортировки строк зависят от языка и региональных параметров для языка и региональных параметров.Conventions for comparing and sorting strings vary from culture to culture. Например порядок сортировки может основываться на Фонетическое название или визуальным представлением символов.For example, the sort order may be based on phonetics or on the visual representation of characters. В восточно-азиатских языков символы являются отсортированный обводкой и корнями идеограмм.In East Asian languages, characters are sorted by the stroke and radical of ideographs. Также сортировки зависит от порядка языков и использовать языки и региональные параметры для алфавита.Sorting also depends on the order languages and cultures use for the alphabet. Например датского языка есть символ «Æ», который в алфавите после «Z».For example, the Danish language has an "Æ" character that it sorts after "Z" in the alphabet. Кроме того может быть сравнение зависеть от регистра символов, и в некоторых случаях правила определения регистра также отличаются языка и региональных параметров.In addition, comparisons can be case-sensitive or case-insensitive, and in some cases casing rules also differ by culture. Порядковое сравнение, с другой стороны, использует кодовые позиции Юникода, отдельных символов в строки при сравнения и сортировки строк.Ordinal comparison, on the other hand, uses the Unicode code points of individual characters in a string when comparing and sorting strings.

Правила сортировки определяют алфавитный порядок символов Юникода и как две строки сравнивать друг с другом.Sort rules determine the alphabetic order of Unicode characters and how two strings compare to each other. Например String.Compare(String, String, StringComparison) метод сравнивает две строки, на основе StringComparison параметра.For example, the String.Compare(String, String, StringComparison) method compares two strings based on the StringComparison parameter. Если значение параметра не StringComparison.CurrentCulture, метод выполняет лингвистического сравнения, который использует соглашения текущих региональных параметров; Если значение параметра не StringComparison.Ordinal, метод выполняет порядковое сравнение.If the parameter value is StringComparison.CurrentCulture, the method performs a linguistic comparison that uses the conventions of the current culture; if the parameter value is StringComparison.Ordinal, the method performs an ordinal comparison. Следовательно, как показано в следующем примере, если текущий язык — американский английский Английский, первый вызов String.Compare(String, String, StringComparison) метод (с помощью сравнение с учетом языка и региональных параметров) рассматривает «» меньше, чем «A», но второй вызов на тот же метод (с помощью порядковое сравнение) рассматривает «a» больше «A».Consequently, as the following example shows, if the current culture is U.S. English, the first call to the String.Compare(String, String, StringComparison) method (using culture-sensitive comparison) considers "a" less than "A", but the second call to the same method (using ordinal comparison) considers "a" greater than "A".

using namespace System;
using namespace System::Globalization;
using namespace System::Threading;

void main()
{
   Thread::CurrentThread->CurrentCulture = CultureInfo::CreateSpecificCulture("en-US");
   Console::WriteLine(String::Compare("A", "a", StringComparison::CurrentCulture));
   Console::WriteLine(String::Compare("A", "a", StringComparison::Ordinal));
}
// The example displays the following output: 
//       1 
//       -32
using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
      Console.WriteLine(String.Compare("A", "a", StringComparison.CurrentCulture));
      Console.WriteLine(String.Compare("A", "a", StringComparison.Ordinal));
   }
}
// The example displays the following output:
//       1
//       -32
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
      Console.WriteLine(String.Compare("A", "a", StringComparison.CurrentCulture))
      Console.WriteLine(String.Compare("A", "a", StringComparison.Ordinal))
   End Sub
End Module
' The example displays the following output:
'       1                                                                                     
'       -32

Платформа .NET поддерживает word, строка и правила сортировки по порядковому номеру..NET supports word, string, and ordinal sort rules:

  • Сортировка по словам выполняет сравнение строк с учетом языка и региональных параметров, в котором некоторые символы Юникода могут иметь особые весовые коэффициенты.A word sort performs a culture-sensitive comparison of strings in which certain nonalphanumeric Unicode characters might have special weights assigned to them. Например дефис (-) может иметь очень низкий весовой «coop» и «co-op» отображаются рядом друг с другом в сортированном списке.For example, the hyphen (-) might have a very small weight assigned to it so that "coop" and "co-op" appear next to each other in a sorted list. Список String методы, которые сравнивают две строки, word, используя правила сортировки см. в разделе строковые операции по категориям раздел.For a list of the String methods that compare two strings using word sort rules, see the String operations by category section.

  • Сортировка по строкам также выполняет сравнение с учетом языка и региональных параметров.A string sort also performs a culture-sensitive comparison. Она аналогична Сортировка по словам, за исключением того, что существует особых случаев нет, и все символы не алфавитно-цифровым предшествуют буквенно-цифровые символы.It is similar to a word sort, except that there are no special cases, and all nonalphanumeric symbols come before all alphanumeric Unicode characters. Можно сравнить две строки с помощью правила сортировки строк путем вызова CompareInfo.Compare перегрузок метода, имеющих options параметр, который имеет указанное значение CompareOptions.StringSort.Two strings can be compared using string sort rules by calling the CompareInfo.Compare method overloads that have an options parameter that is supplied a value of CompareOptions.StringSort. Обратите внимание, что это единственный метод, платформа .NET предоставляет для сравнения двух строк, используя правила сортировки строк.Note that this is the only method that .NET provides to compare two strings using string sort rules.

  • Сортировки по порядковому номеру строки сравниваются на основе числовое значение каждого из них Char объекта в строку.An ordinal sort compares strings based on the numeric value of each Char object in the string. Порядковое сравнение автоматически с учетом регистра, так как в нижнем и верхнем регистре символа имеют разные кодовые точки.An ordinal comparison is automatically case-sensitive because the lowercase and uppercase versions of a character have different code points. Тем не менее если регистр не имеет значения, можно указать порядковое сравнение, которое не учитывает регистр.However, if case is not important, you can specify an ordinal comparison that ignores case. Это эквивалентно преобразованию строки в верхний регистр с помощью инвариантного языка и региональных параметров и выполнению порядкового сравнения результатов.This is equivalent to converting the string to uppercase by using the invariant culture and then performing an ordinal comparison on the result. Список String методы, которые сравнивают две строки, используя правила сортировки по порядковому номеру, см. в разделе строковые операции по категориям раздел.For a list of the String methods that compare two strings using ordinal sort rules, see the String operations by category section.

Сравнение с учетом языка и региональных параметров является любое сравнение, которое явно или неявно использующая CultureInfo объекта, включая инвариантного языка и региональных параметров, который задается параметром CultureInfo.InvariantCulture свойство.A culture-sensitive comparison is any comparison that explicitly or implicitly uses a CultureInfo object, including the invariant culture that is specified by the CultureInfo.InvariantCulture property. Неявное языка и региональных параметров является текущим языком, который задается путем Thread.CurrentCulture и CultureInfo.CurrentCulture свойства.The implicit culture is the current culture, which is specified by the Thread.CurrentCulture and CultureInfo.CurrentCulture properties. Есть значительные отклонения в порядке сортировки букв (то есть символы, для которого Char.IsLetter возвращает true) различных региональных параметров.There is considerable variation in the sort order of alphabetic characters (that is, characters for which the Char.IsLetter property returns true) across cultures. Можно указать сравнение с учетом языка и региональных параметров, который использует правила конкретного языка и региональных параметров, указав CultureInfo объекта в метод сравнения строк, таких как Compare(String, String, CultureInfo, CompareOptions).You can specify a culture-sensitive comparison that uses the conventions of a specific culture by supplying a CultureInfo object to a string comparison method such as Compare(String, String, CultureInfo, CompareOptions). Можно указать сравнение с учетом языка и региональных параметров, который использует соглашения текущих региональных параметров, указав StringComparison.CurrentCulture, StringComparison.CurrentCultureIgnoreCase, или любой член CompareOptions перечисления, отличное от CompareOptions.Ordinal или CompareOptions.OrdinalIgnoreCase — соответствующую перегруженная версия Compare метод.You can specify a culture-sensitive comparison that uses the conventions of the current culture by supplying StringComparison.CurrentCulture, StringComparison.CurrentCultureIgnoreCase, or any member of the CompareOptions enumeration other than CompareOptions.Ordinal or CompareOptions.OrdinalIgnoreCase to an appropriate overload of the Compare method. Сравнение с учетом языка и региональных параметров обычно подходит для сортировки, тогда как порядковое сравнение — нет.A culture-sensitive comparison is generally appropriate for sorting whereas an ordinal comparison is not. Порядковое сравнение, как правило, подходят для определения, равны ли две строки (то есть для определения удостоверений) в то время как не является сравнение с учетом языка и региональных параметров.An ordinal comparison is generally appropriate for determining whether two strings are equal (that is, for determining identity) whereas a culture-sensitive comparison is not.

В следующем примере показано различие между сравнения с учетом языка и региональных параметров и порядковый номер.The following example illustrates the difference between culture-sensitive and ordinal comparison. Пример возвращает три строки, «Apple», «Æble» и «AEble», используя порядковое сравнение и соглашений для языков и региональных параметров da-DK "и" en US (каждый из которых является языком по умолчанию во время Compare вызывается метод).The example evaluates three strings, "Apple", "Æble", and "AEble", using ordinal comparison and the conventions of the da-DK and en-US cultures (each of which is the default culture at the time the Compare method is called). Поскольку датского языка воспринимает символ «Æ» отдельной буквой и сортирует его после «Z» в алфавите, строка «Æble» больше, чем «Apple».Because the Danish language treats the character "Æ" as an individual letter and sorts it after "Z" in the alphabet, the string "Æble" is greater than "Apple". Тем не менее «Æble» не считаются эквивалентными «AEble», поэтому «Æble» также больше, чем «AEble».However, "Æble" is not considered equivalent to "AEble", so "Æble" is also greater than "AEble". Отсутствует буква «Æ» en-US, но считает, что эквивалентно «AE», что объясняет, почему «Æble» меньше, чем «Apple», но равным «AEble».The en-US culture doesn't include the letter"Æ" but treats it as equivalent to "AE", which explains why "Æble" is less than "Apple" but equal to "AEble". Порядковое сравнение, с другой стороны, считает, что «Apple», чтобы быть меньше, чем «Æble» и «Æble» должно быть больше «AEble».Ordinal comparison, on the other hand, considers "Apple" to be less than "Æble", and "Æble" to be greater than "AEble".

using System;
using System.Globalization;
using System.Threading;

public class CompareStringSample
{
   public static void Main()
   {
      string str1 = "Apple";
      string str2 = "Æble"; 
      string str3 = "AEble";
      
      // Set the current culture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      Console.WriteLine("Current culture: {0}", 
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str1, str2, String.Compare(str1, str2));
      Console.WriteLine("Comparison of {0} with {1}: {2}\n", 
                        str2, str3, String.Compare(str2, str3));
      
      // Set the current culture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      Console.WriteLine("Current culture: {0}", 
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str1, str2, String.Compare(str1, str2));
      Console.WriteLine("Comparison of {0} with {1}: {2}\n", 
                        str2, str3, String.Compare(str2, str3));
      
      // Perform an ordinal comparison.
      Console.WriteLine("Ordinal comparison");
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str1, str2, 
                        String.Compare(str1, str2, StringComparison.Ordinal));
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str2, str3, 
                        String.Compare(str2, str3, StringComparison.Ordinal));
   }
}
// The example displays the following output:
//       Current culture: da-DK
//       Comparison of Apple with Æble: -1
//       Comparison of Æble with AEble: 1
//       
//       Current culture: en-US
//       Comparison of Apple with Æble: 1
//       Comparison of Æble with AEble: 0
//       
//       Ordinal comparison
//       Comparison of Apple with Æble: -133
//       Comparison of Æble with AEble: 133
Imports System.Globalization
Imports System.Threading

Public Module Example
   Public Sub Main()
      Dim str1 As String = "Apple"
      Dim str2 As String = "Æble"
      Dim str3 As String = "AEble"
      
      ' Set the current culture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      Console.WriteLine("Current culture: {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str1, str2, String.Compare(str1, str2))
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str2, str3, String.Compare(str2, str3))
      Console.WriteLine()
      
      ' Set the current culture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      Console.WriteLine("Current culture: {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str1, str2, String.Compare(str1, str2))
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str2, str3, String.Compare(str2, str3))
      Console.WriteLine()
      
      ' Perform an ordinal comparison.
      Console.WriteLine("Ordinal comparison")
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str1, str2, 
                        String.Compare(str1, str2, StringComparison.Ordinal))
      Console.WriteLine("Comparison of {0} with {1}: {2}", 
                        str2, str3, 
                        String.Compare(str2, str3, StringComparison.Ordinal))
   End Sub
End Module
' The example displays the following output:
'       Current culture: da-DK
'       Comparison of Apple with Æble: -1
'       Comparison of Æble with AEble: 1
'       
'       Current culture: en-US
'       Comparison of Apple with Æble: 1
'       Comparison of Æble with AEble: 0
'       
'       Ordinal comparison
'       Comparison of Apple with Æble: -133
'       Comparison of Æble with AEble: 133

Используйте следующие общие рекомендации для выбора соответствующего метода сравнения сортировки или строки:Use the following general guidelines to choose an appropriate sorting or string comparison method:

  • Если требуется строки, которые следует упорядочить зависимости от языка и региональных параметров пользователя, следует упорядочить их на основе соглашений текущих региональных параметров.If you want the strings to be ordered based on the user's culture, you should order them based on the conventions of the current culture. При изменении языка и региональных параметров пользователя, порядок сортировки строк также изменится соответствующим образом.If the user's culture changes, the order of sorted strings will also change accordingly. Например приложение тезауруса следует всегда сортировки слов, в зависимости от языка и региональных параметров пользователя.For example, a thesaurus application should always sort words based on the user's culture.

  • Если требуется строки, которые следует упорядочить зависимости от соглашений для конкретного языка и региональных параметров, следует упорядочить их, указав CultureInfo объект, представляющий этот язык для метода сравнения.If you want the strings to be ordered based on the conventions of a specific culture, you should order them by supplying a CultureInfo object that represents that culture to a comparison method. Например в приложение, предназначенное для обучения определенного языка, вы можете строки заказываемого зависимости от соглашения одного из языков и региональных параметров, которые произносит этого языка.For example, in an application designed to teach students a particular language, you want strings to be ordered based on the conventions of one of the cultures that speaks that language.

  • Если требуется, чтобы порядок строк остаются неизменными в разных языках, следует упорядочить их на основе соглашений инвариантного языка и региональных параметров или используют порядковое сравнение.If you want the order of strings to remain unchanged across cultures, you should order them based on the conventions of the invariant culture or use an ordinal comparison. Например будет использовать порядковую сортировку для организации имен файлов, процессов, взаимные исключения или именованные каналы.For example, you would use an ordinal sort to organize the names of files, processes, mutexes, or named pipes.

  • Для сравнения, который включает в себя решение безопасности (например, допустим ли имя пользователя), всегда следует выполнять порядковый номер проверка на равенство, вызвав перегрузку Equals метод.For a comparison that involves a security decision (such as whether a username is valid), you should always perform an ordinal test for equality by calling an overload of the Equals method.

Примечание

Сортировка с учетом языка и региональных параметров и правил, используемых в сравнении строк регистр зависят от версии платформы .NET.The culture-sensitive sorting and casing rules used in string comparison depend on the version of the .NET. В .NET Framework 4.5 и более поздних версий на Windows 8Windows 8 операционной системы, сортировку, регистр, нормализации и сведений о символах Юникода соответствует стандарту Юникод 6.0.In the .NET Framework 4.5 and later versions running on the Windows 8Windows 8 operating system, sorting, casing, normalization, and Unicode character information conforms to the Unicode 6.0 standard. В других операционных системах Windows он соответствует стандартной Unicode 5.0.On other Windows operating systems, it conforms to the Unicode 5.0 standard. В .NET Core она зависит от версии стандарта Юникод, поддерживаемых операционной системы.On .NET Core, it depends on the version of the Unicode Standard supported by the underlying operating system.

Дополнительные сведения о word, строка и правила сортировки по порядковому номеру, см. в разделе System.Globalization.CompareOptions раздела.For more information about word, string, and ordinal sort rules, see the System.Globalization.CompareOptions topic. См. Дополнительные рекомендации по использованию каждого правила советы и рекомендации по использованию строк.For additional recommendations on when to use each rule, see Best Practices for Using Strings.

Как правило, вы не вызываете строковое сравнение методов, таких как Compare напрямую, чтобы определить порядок сортировки строк.Ordinarily, you don't call string comparison methods such as Compare directly to determine the sort order of strings. Вместо этого вызываются методы сравнения, таких как методы сортировки Array.Sort или List<T>.Sort.Instead, comparison methods are called by sorting methods such as Array.Sort or List<T>.Sort. В следующем примере выполняется четыре различных сортировки операций (с использованием текущего языка и региональных параметров, сортировки word с использованием инвариантных региональных параметров, порядковый номер сортировки и сортировка по строкам с использованием инвариантных региональных параметров сортировки word) без явного вызова метода сравнения строк, Несмотря на то, что их следует указывать тип сравнения для использования.The following example performs four different sorting operations (word sort using the current culture, word sort using the invariant culture, ordinal sort, and string sort using the invariant culture) without explicitly calling a string comparison method, although they do specify the type of comparison to use. Обратите внимание на то, что каждый тип сортировки создает уникальный упорядочение строк в его массив.Note that each type of sort produces a unique ordering of strings in its array.

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Globalization;

// IComparer<String> implementation to perform string sort. 
ref class SCompare : System::Collections::Generic::IComparer<String^>
{
public:
   SCompare() {};

   virtual int Compare(String^ x, String^ y)
   {
      return CultureInfo::CurrentCulture->CompareInfo->Compare(x, y, CompareOptions::StringSort);
   }
};

void main()
{
   array<String^>^ strings = gcnew array<String^> { "coop", "co-op", "cooperative", 
                                                    L"co\x00ADoperative", L"c�ur", "coeur" };

   // Perform a word sort using the current (en-US) culture. 
   array<String^>^ current = gcnew array<String^>(strings->Length); 
   strings->CopyTo(current, 0); 
   Array::Sort(current, StringComparer::CurrentCulture);

   // Perform a word sort using the invariant culture. 
   array<String^>^ invariant = gcnew array<String^>(strings->Length);
   strings->CopyTo(invariant, 0); 
   Array::Sort(invariant, StringComparer::InvariantCulture);

   // Perform an ordinal sort. 
   array<String^>^ ordinal = gcnew array<String^>(strings->Length);
   strings->CopyTo(ordinal, 0); 
   Array::Sort(ordinal, StringComparer::Ordinal);

   // Perform a string sort using the current culture. 
   array<String^>^ stringSort = gcnew array<String^>(strings->Length);
   strings->CopyTo(stringSort, 0); 
   Array::Sort(stringSort, gcnew SCompare());

   // Display array values
   Console::WriteLine("{0,13} {1,13} {2,15} {3,13} {4,13}\n", 
                     "Original", "Word Sort", "Invariant Word", 
                     "Ordinal Sort", "String Sort");
   for (int ctr = 0; ctr < strings->Length; ctr++)
      Console::WriteLine("{0,13} {1,13} {2,15} {3,13} {4,13}", 
                         strings[ctr], current[ctr], invariant[ctr], 
                         ordinal[ctr], stringSort[ctr] );          
}
// The example displays the following output: 
//         Original     Word Sort  Invariant Word  Ordinal Sort   String Sort 
//     
//             coop          c�ur            c�ur         co-op         co-op 
//            co-op         coeur           coeur         coeur          c�ur 
//      cooperative          coop            coop          coop         coeur 
//      co�operative         co-op           co-op   cooperative          coop 
//             c�ur   cooperative     cooperative   co�operative   cooperative 
//            coeur   co�operative     co�operative          c�ur   co�operative
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
 
public class Example
{
   public static void Main()
   {
      string[] strings = { "coop", "co-op", "cooperative", 
                           "co\u00ADoperative", "cœur", "coeur" };

      // Perform a word sort using the current (en-US) culture.
      string[] current = new string[strings.Length]; 
      strings.CopyTo(current, 0); 
      Array.Sort(current, StringComparer.CurrentCulture);

      // Perform a word sort using the invariant culture.
      string[] invariant = new string[strings.Length];
      strings.CopyTo(invariant, 0); 
      Array.Sort(invariant, StringComparer.InvariantCulture);

      // Perform an ordinal sort.
      string[] ordinal = new string[strings.Length];
      strings.CopyTo(ordinal, 0); 
      Array.Sort(ordinal, StringComparer.Ordinal);

      // Perform a string sort using the current culture.
      string[] stringSort = new string[strings.Length];
      strings.CopyTo(stringSort, 0); 
      Array.Sort(stringSort, new SCompare());

      // Display array values
      Console.WriteLine("{0,13} {1,13} {2,15} {3,13} {4,13}\n", 
                        "Original", "Word Sort", "Invariant Word", 
                        "Ordinal Sort", "String Sort");
      for (int ctr = 0; ctr < strings.Length; ctr++)
         Console.WriteLine("{0,13} {1,13} {2,15} {3,13} {4,13}", 
                           strings[ctr], current[ctr], invariant[ctr], 
                           ordinal[ctr], stringSort[ctr] );          
   }
}

// IComparer<String> implementation to perform string sort.
internal class SCompare : IComparer<String>
{
   public int Compare(string x, string y)
   {
      return CultureInfo.CurrentCulture.CompareInfo.Compare(x, y, CompareOptions.StringSort);
   }
}
// The example displays the following output:
//         Original     Word Sort  Invariant Word  Ordinal Sort   String Sort
//    
//             coop          cœur            cœur         co-op         co-op
//            co-op         coeur           coeur         coeur          cœur
//      cooperative          coop            coop          coop         coeur
//     co­operative         co-op           co-op   cooperative          coop
//             cœur   cooperative     cooperative  co­operative   cooperative
//            coeur  co­operative    co­operative          cœur  co­operative
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim strings() As String = { "coop", "co-op", "cooperative", 
                                  "co" + ChrW(&h00AD) + "operative", 
                                  "cœur", "coeur" }

      ' Perform a word sort using the current (en-US) culture.
      Dim current(strings.Length - 1) As String  
      strings.CopyTo(current, 0) 
      Array.Sort(current, StringComparer.CurrentCulture)

      ' Perform a word sort using the invariant culture.
      Dim invariant(strings.Length - 1) As String
      strings.CopyTo(invariant, 0) 
      Array.Sort(invariant, StringComparer.InvariantCulture)

      ' Perform an ordinal sort.
      Dim ordinal(strings.Length - 1) As String
      strings.CopyTo(ordinal, 0) 
      Array.Sort(ordinal, StringComparer.Ordinal)

      ' Perform a string sort using the current culture.
      Dim stringSort(strings.Length - 1) As String
      strings.CopyTo(stringSort, 0) 
      Array.Sort(stringSort, new SCompare())

      ' Display array values
      Console.WriteLine("{0,13} {1,13} {2,15} {3,13} {4,13}", 
                        "Original", "Word Sort", "Invariant Word", 
                        "Ordinal Sort", "String Sort")
      Console.WriteLine()
                                                      
      For ctr As Integer = 0 To strings.Length - 1
         Console.WriteLine("{0,13} {1,13} {2,15} {3,13} {4,13}", 
                           strings(ctr), current(ctr), invariant(ctr), 
                           ordinal(ctr), stringSort(ctr))   
      Next                                  
   End Sub
End Module

' IComparer<String> implementation to perform string sort.
Friend Class SCompare : Implements IComparer(Of String)
   Public Function Compare(x As String, y As String) As Integer _
                   Implements IComparer(Of String).Compare
      Return CultureInfo.CurrentCulture.CompareInfo.Compare(x, y, CompareOptions.StringSort)
   End Function
End Class
' The example displays the following output:
'         Original     Word Sort  Invariant Word  Ordinal Sort   String Sort
'    
'             coop          cœur            cœur         co-op         co-op
'            co-op         coeur           coeur         coeur          cœur
'      cooperative          coop            coop          coop         coeur
'     co­operative         co-op           co-op   cooperative          coop
'             cœur   cooperative     cooperative  co­operative   cooperative
'            coeur  co­operative    co­operative          cœur  co­operative

Совет

На внутреннем уровне .NET использует ключи сортировки для поддержки сравнение сортировок, зависящих от строк.Internally, .NET uses sort keys to support culturally sensitive string comparison. Каждый символ в строке дается несколько категорий весового значения сортировки, включая буквы, регистра и диакритических знаков.Each character in a string is given several categories of sort weights, including alphabetic, case, and diacritic. Ключ сортировки, представленный SortKey класса, предоставляет хранилищем этих значений для определенной строки.A sort key, represented by the SortKey class, provides a repository of these weights for a particular string. Если приложение выполняет большое количество поиска и сортировки тот же набор строк, может повысить его производительность, создавая и сохраняя ключи сортировки для всех строк, которые он использует.If your app performs a large number of searching or sorting operations on the same set of strings, you can improve its performance by generating and storing sort keys for all the strings that it uses. Если требуется операция сортировки или сравнения, ключи сортировки используется вместо строк.When a sort or comparison operation is required, you use the sort keys instead of the strings. Дополнительные сведения см. в описании класса SortKey.For more information, see the SortKey class.

Если вы не укажете соглашение сравнения строки, методы сортировки например Array.Sort(Array) выполнения сортировки с учетом языка и региональных параметров символов, с учетом регистра строк.If you don't specify a string comparison convention, sorting methods such as Array.Sort(Array) perform a culture-sensitive, case-sensitive sort on strings. В следующем примере показано, как изменение текущего языка и региональных параметров влияет на порядок сортировки строк в массиве.The following example illustrates how changing the current culture affects the order of sorted strings in an array. Он создает массив из трех строк.It creates an array of three strings. Во-первых, он задает System.Threading.Thread.CurrentThread.CurrentCulture значение en US и вызовы Array.Sort(Array) метод.First, it sets the System.Threading.Thread.CurrentThread.CurrentCulture property to en-US and calls the Array.Sort(Array) method. Полученный порядок сортировки основан на правилах сортировки для английского языка (США).The resulting sort order is based on sorting conventions for the English (United States) culture. Далее в этом примере System.Threading.Thread.CurrentThread.CurrentCulture свойство da-DK и вызовы Array.Sort метод снова.Next, the example sets the System.Threading.Thread.CurrentThread.CurrentCulture property to da-DK and calls the Array.Sort method again. Обратите внимание на то, как полученный порядок сортировки отличается от результатов en US, так как он использует правила сортировки для датский (Дания).Notice how the resulting sort order differs from the en-US results because it uses the sorting conventions for Danish (Denmark).

using System;
using System.Globalization;
using System.Threading;

public class ArraySort 
{
   public static void Main(String[] args) 
   {
      // Create and initialize a new array to store the strings.
      string[] stringArray = { "Apple", "Æble", "Zebra"};

      // Display the values of the array.
      Console.WriteLine( "The original string array:");
      PrintIndexAndValues(stringArray);

      // Set the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Sort the values of the array.
      Array.Sort(stringArray);

      // Display the values of the array.
      Console.WriteLine("After sorting for the culture \"en-US\":");
      PrintIndexAndValues(stringArray); 

      // Set the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Sort the values of the Array.
      Array.Sort(stringArray);

      // Display the values of the array.
      Console.WriteLine("After sorting for the culture \"da-DK\":");
      PrintIndexAndValues(stringArray); 
   }
   public static void PrintIndexAndValues(string[] myArray)  
   {
      for (int i = myArray.GetLowerBound(0); i <= 
            myArray.GetUpperBound(0); i++ )
         Console.WriteLine("[{0}]: {1}", i, myArray[i]);
      Console.WriteLine();      
   }
}
// The example displays the following output:
//       The original string array:
//       [0]: Apple
//       [1]: Æble
//       [2]: Zebra
//       
//       After sorting for the "en-US" culture:
//       [0]: Æble
//       [1]: Apple
//       [2]: Zebra
//       
//       After sorting for the culture "da-DK":
//       [0]: Apple
//       [1]: Zebra
//       [2]: Æble
Imports System.Globalization
Imports System.IO
Imports System.Threading

Public Class TextToFile   
   Public Shared Sub Main()
      ' Creates and initializes a new array to store 
      ' these date/time objects.
      Dim stringArray() As String = { "Apple", "Æble", "Zebra"}
      
      ' Displays the values of the array.
      Console.WriteLine("The original string array:")
      PrintIndexAndValues(stringArray)
      
      ' Set the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Sort the values of the Array.
      Array.Sort(stringArray)
      
      ' Display the values of the array.
      Console.WriteLine("After sorting for the ""en-US"" culture:")
      PrintIndexAndValues(stringArray)
      
      ' Set the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      ' Sort the values of the Array.
      Array.Sort(stringArray)
      
      ' Displays the values of the Array.
      Console.WriteLine("After sorting for the culture ""da-DK"":")
      PrintIndexAndValues(stringArray)
   End Sub

   Public Shared Sub PrintIndexAndValues(myArray() As String)
      For i As Integer = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
         Console.WriteLine("[{0}]: {1}", i, myArray(i))
      Next
      Console.WriteLine()
   End Sub 
End Class
' The example displays the following output:
'       The original string array:
'       [0]: Apple
'       [1]: Æble
'       [2]: Zebra
'       
'       After sorting for the "en-US" culture:
'       [0]: Æble
'       [1]: Apple
'       [2]: Zebra
'       
'       After sorting for the culture "da-DK":
'       [0]: Apple
'       [1]: Zebra
'       [2]: Æble

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

Если ваша основная цель в сравнении строк — чтобы определить, равны ли они, следует вызвать String.Equals метод.If your primary purpose in comparing strings is to determine whether they are equal, you should call the String.Equals method. Как правило, следует использовать Equals для выполняют порядковое сравнение.Typically, you should use Equals to perform an ordinal comparison. String.Compare Метод предназначен главным образом для сортировки строк.The String.Compare method is intended primarily to sort strings.

Строка, методы поиска, такие как String.StartsWith и String.IndexOf, также можно выполнять сравнение строк с учетом языка и региональных параметров или порядковый номер.String search methods, such as String.StartsWith and String.IndexOf, also can perform culture-sensitive or ordinal string comparisons. В следующем примере показано различия между сравнения порядкового номера, с учетом языка и региональных параметров, с использованием IndexOf метод.The following example illustrates the differences between ordinal and culture-sensitive comparisons using the IndexOf method. Поиск зависящих от языка и региональных параметров, в котором текущий язык — Русский (Россия) считает, что подстрока «обозревателя объектов» в соответствии с лигатуры «œ».A culture-sensitive search in which the current culture is English (United States) considers the substring "oe" to match the ligature "œ". Поскольку мягкий перенос (U + 00AD) является символом нулевой ширины, поиск считает мягкий перенос эквивалентно Empty и поиск совпадения в начале строки.Because a soft hyphen (U+00AD) is a zero-width character, the search treats the soft hyphen as equivalent to Empty and finds a match at the beginning of the string. Поиск по порядковым номерам, с другой стороны, не найден в любом случае.An ordinal search, on the other hand, does not find a match in either case.

using namespace System;

void FindInString(String^ s, String^ substring, StringComparison options);

void main()
{
   // Search for "oe" and "�u" in "�ufs" and "oeufs".
   String^ s1 = L"�ufs";
   String^ s2 = L"oeufs";
   FindInString(s1, "oe", StringComparison::CurrentCulture);
   FindInString(s1, "oe", StringComparison::Ordinal);
   FindInString(s2, "�u", StringComparison::CurrentCulture);
   FindInString(s2, "�u", StringComparison::Ordinal);
   Console::WriteLine();

   String^ s3 = L"co\x00ADoperative";
   FindInString(s3, L"\x00AD", StringComparison::CurrentCulture);
   FindInString(s3, L"\x00AD", StringComparison::Ordinal);
}

void FindInString(String^ s, String^ substring, StringComparison options)
{
   int result = s->IndexOf(substring, options);
   if (result != -1)
      Console::WriteLine("'{0}' found in {1} at position {2}", 
                        substring, s, result);
   else
      Console::WriteLine("'{0}' not found in {1}", 
                        substring, s);                                                  
}
// The example displays the following output:
//      'oe' found in oufs at position 0
//      'oe' not found in oufs
//      'ou' found in oeufs at position 0
//      'ou' not found in oeufs
//
//      '-' found in co-operative at position 0
//      '-' found in co-operative at position 2
using System;

public class Example
{
   public static void Main()
   {
      // Search for "oe" and "œu" in "œufs" and "oeufs".
      string s1 = "œufs";
      string s2 = "oeufs";
      FindInString(s1, "oe", StringComparison.CurrentCulture);
      FindInString(s1, "oe", StringComparison.Ordinal);
      FindInString(s2, "œu", StringComparison.CurrentCulture);
      FindInString(s2, "œu", StringComparison.Ordinal);
      Console.WriteLine();
      
      string s3 = "co\u00ADoperative";
      FindInString(s3, "\u00AD", StringComparison.CurrentCulture);
      FindInString(s3, "\u00AD", StringComparison.Ordinal);
   }

   private static void FindInString(string s, string substring, StringComparison options)
   {
      int result = s.IndexOf(substring, options);
      if (result != -1)
         Console.WriteLine("'{0}' found in {1} at position {2}", 
                           substring, s, result);
      else
         Console.WriteLine("'{0}' not found in {1}", 
                           substring, s);                                                  
   }
}
// The example displays the following output:
//       'oe' found in œufs at position 0
//       'oe' not found in œufs
//       'œu' found in oeufs at position 0
//       'œu' not found in oeufs
//       
//       '­' found in co­operative at position 0
//       '­' found in co­operative at position 2
Module Example
   Public Sub Main()
      ' Search for "oe" and "œu" in "œufs" and "oeufs".
      Dim s1 As String = "œufs"
      Dim s2 As String = "oeufs"
      FindInString(s1, "oe", StringComparison.CurrentCulture)
      FindInString(s1, "oe", StringComparison.Ordinal)
      FindInString(s2, "œu", StringComparison.CurrentCulture)
      FindInString(s2, "œu", StringComparison.Ordinal)
      Console.WriteLine()
      
      Dim softHyphen As String = ChrW(&h00AD)
      Dim s3 As String = "co" + softHyphen + "operative"
      FindInString(s3, softHyphen, StringComparison.CurrentCulture)
      FindInString(s3, softHyphen, StringComparison.Ordinal)
   End Sub

   Private Sub FindInString(s As String, substring As String, 
                            options As StringComparison)
      Dim result As Integer = s.IndexOf(substring, options)
      If result <> -1
         Console.WriteLine("'{0}' found in {1} at position {2}", 
                           substring, s, result)
      Else
         Console.WriteLine("'{0}' not found in {1}", 
                           substring, s)
      End If                                                                          
   End Sub
End Module
' The example displays the following output:
'       'oe' found in œufs at position 0
'       'oe' not found in œufs
'       'œu' found in oeufs at position 0
'       'œu' not found in oeufs
'       
'       '­' found in co­operative at position 0
'       '­' found in co­operative at position 2

Поиск строкSearching Strings

Строка, методы поиска, такие как String.StartsWith и String.IndexOf, также можно выполнить от культуры или сравнения строк по порядковому номеру, чтобы определить, является ли символ или подстроку находится в указанной строке.String search methods, such as String.StartsWith and String.IndexOf, also can perform culture-sensitive or ordinal string comparisons to determine whether a character or substring is found in a specified string.

Методы поиска в String класса, такие как найти отдельный символ, IndexOf метода или один из набора символов, таких как IndexOfAny метод, выполняет поиск по порядковым номерам.The search methods in the String class that search for an individual character, such as the IndexOf method, or one of a set of characters, such as the IndexOfAny method, all perform an ordinal search. Чтобы выполнить поиск с учетом языка и региональных параметров для символа, необходимо вызвать CompareInfo метода, такого как CompareInfo.IndexOf(String, Char) или CompareInfo.LastIndexOf(String, Char).To perform a culture-sensitive search for a character, you must call a CompareInfo method such as CompareInfo.IndexOf(String, Char) or CompareInfo.LastIndexOf(String, Char). Обратите внимание на то, что результаты поиска для символов, с помощью сравнения порядкового номера, с учетом языка и региональных параметров могут оказаться совершенно другими.Note that the results of searching for a character using ordinal and culture-sensitive comparison can be very different. Например, при поиске составной знак Юникода, например лигатура «?» (U + 00 C 6) может соответствовать любой из его компонентов в правильной последовательности, например «AE» экземпляров (U + 041U + 0045), в зависимости от языка и региональных параметров.For example, a search for a precomposed Unicode character such as the ligature "Æ" (U+00C6) might match any occurrence of its components in the correct sequence, such as "AE" (U+041U+0045), depending on the culture. В следующем примере показано различие между String.IndexOf(Char) и CompareInfo.IndexOf(String, Char) методы при поиске отдельный символ.The following example illustrates the difference between the String.IndexOf(Char) and CompareInfo.IndexOf(String, Char) methods when searching for an individual character. Лигатура «?» (U + 00E6) находится в строке «воздушный» при использовании правил языка en US, но не в том случае, когда с помощью соглашений культуры da-DK или при выполнении порядкового сравнения.The ligature "æ" (U+00E6) is found in the string "aerial" when using the conventions of the en-US culture, but not when using the conventions of the da-DK culture or when performing an ordinal comparison.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      String[] cultureNames = { "da-DK", "en-US" };
      CompareInfo ci;
      String str = "aerial";
      Char ch = 'æ';  // U+00E6
      
      Console.Write("Ordinal comparison -- ");
      Console.WriteLine("Position of '{0}' in {1}: {2}", ch, str,
                        str.IndexOf(ch));
      
      foreach (var cultureName in cultureNames) {
         ci = CultureInfo.CreateSpecificCulture(cultureName).CompareInfo;
         Console.Write("{0} cultural comparison -- ", cultureName);
         Console.WriteLine("Position of '{0}' in {1}: {2}", ch, str,
                           ci.IndexOf(str, ch));
      }
   }
}
// The example displays the following output:
//       Ordinal comparison -- Position of 'æ' in aerial: -1
//       da-DK cultural comparison -- Position of 'æ' in aerial: -1
//       en-US cultural comparison -- Position of 'æ' in aerial: 0
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "da-DK", "en-US" }
      Dim ci As CompareInfo
      Dim str As String = "aerial"
      Dim ch As Char = "æ"c  ' U+00E6
      
      Console.Write("Ordinal comparison -- ")
      Console.WriteLine("Position of '{0}' in {1}: {2}", ch, str,
                        str.IndexOf(ch))
      
      For Each cultureName In cultureNames
         ci = CultureInfo.CreateSpecificCulture(cultureName).CompareInfo
         Console.Write("{0} cultural comparison -- ", cultureName)
         Console.WriteLine("Position of '{0}' in {1}: {2}", ch, str,
                           ci.IndexOf(str, ch))
      Next
   End Sub
End Module
' The example displays the following output:
'       Ordinal comparison -- Position of 'æ' in aerial: -1
'       da-DK cultural comparison -- Position of 'æ' in aerial: -1
'       en-US cultural comparison -- Position of 'æ' in aerial: 0

С другой стороны String методы, найдите строку, а не символ выполнения поиска с учетом языка и региональных параметров, если параметры поиска не заданы явным образом с помощью параметра типа класса StringComparison.On the other hand, String class methods that search for a string rather than a character perform a culture-sensitive search if search options are not explicitly specified by a parameter of type StringComparison. Единственное исключение — Contains, который выполняет поиск по порядковым номерам.The sole exception is Contains, which performs an ordinal search.

Проверка на равенствоTesting for equality

Используйте String.Compare метод, чтобы определить связь между двумя строками в порядке сортировки.Use the String.Compare method to determine the relationship of two strings in the sort order. Как правило это операция с учетом языка и региональных параметров.Typically, this is a culture-sensitive operation. Напротив, вызовите String.Equals метод для проверки на равенство.In contrast, call the String.Equals method to test for equality. Так как проверка на равенство обычно сравнивает входные данные пользователя с некоторых известных строка, такая как допустимое имя пользователя, пароль или путь файловой системы, это обычно порядковые операции.Because the test for equality usually compares user input with some known string, such as a valid user name, a password, or a file system path, it is typically an ordinal operation.

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

Возможно, для проверки на равенство, вызвав String.Compare метод и определить, является ли возвращаемое значение ноль.It is possible to test for equality by calling the String.Compare method and determining whether the return value is zero. Тем не менее это не рекомендуется.However, this practice is not recommended. Чтобы определить, равны ли две строки, следует вызвать один из перегруженных версий String.Equals метод.To determine whether two strings are equal, you should call one of the overloads of the String.Equals method. Предпочтительный перегрузки для вызова является либо экземпляром Equals(String, StringComparison) метод или статический Equals(String, String, StringComparison) метод, так как оба метода включают System.StringComparison параметр, который явно указывает тип сравнения.The preferred overload to call is either the instance Equals(String, StringComparison) method or the static Equals(String, String, StringComparison) method, because both methods include a System.StringComparison parameter that explicitly specifies the type of comparison.

В следующем примере показано опасности выполнения учитывающего культуру сравнения на равенство, когда один из них следует использовать вместо этого порядкового номера.The following example illustrates the danger of performing a culture-sensitive comparison for equality when an ordinal one should be used instead. В этом случае назначение кода — запретить доступ к файловой системе с URL-адресов, которые начинаются с «FILE://» или «file://», выполнив сравнение без учета регистра, начиная со строки «FILE://» URL-адреса.In this case, the intent of the code is to prohibit file system access from URLs that begin with "FILE://" or "file://" by performing a case-insensitive comparison of the beginning of a URL with the string "FILE://". Тем не менее если сравнение с учетом языка и региональных параметров выполняется с помощью турецкий (Турция) языка и региональных параметров в URL-адрес, который начинается с «file://», сравнение на предмет равенства завершается ошибкой, так как эквивалент турецкого регистре нижний регистр «i» — «i» вместо «I».However, if a culture-sensitive comparison is performed using the Turkish (Turkey) culture on a URL that begins with "file://", the comparison for equality fails, because the Turkish uppercase equivalent of the lowercase "i" is "İ" instead of "I". Таким образом случайно разрешен доступ к файловой системе.As a result, file system access is inadvertently permitted. С другой стороны Если выполняется порядковое сравнение, сравнение на равенство успешно и запрещен доступ к файловой системе.On the other hand, if an ordinal comparison is performed, the comparison for equality succeeds, and file system access is denied.

using namespace System;
using namespace System::Globalization;
using namespace System::Threading;

bool TestForEquality(String^ str, StringComparison cmp);

void main()
{
   Thread::CurrentThread->CurrentCulture = CultureInfo::CreateSpecificCulture("tr-TR");      

   String^ filePath = "file://c:/notes.txt";

   Console::WriteLine("Culture-sensitive test for equality:");
   if (! TestForEquality(filePath, StringComparison::CurrentCultureIgnoreCase))
      Console::WriteLine("Access to {0} is allowed.", filePath);
   else
      Console::WriteLine("Access to {0} is not allowed.", filePath);

   Console::WriteLine("\nOrdinal test for equality:");
   if (! TestForEquality(filePath, StringComparison::OrdinalIgnoreCase))
      Console::WriteLine("Access to {0} is allowed.", filePath);
   else
      Console::WriteLine("Access to {0} is not allowed.", filePath);
}

bool TestForEquality(String^ str, StringComparison cmp)
{
      int position = str->IndexOf("://");
      if (position < 0) return false;

      String^ substring = str->Substring(0, position);  
      return substring->Equals("FILE", cmp);
}
// The example displays the following output: 
//       Culture-sensitive test for equality: 
//       Access to file://c:/notes.txt is allowed. 
//        
//       Ordinal test for equality: 
//       Access to file://c:/notes.txt is not allowed.
using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("tr-TR");      

      string filePath = "file://c:/notes.txt";
      
      Console.WriteLine("Culture-sensitive test for equality:");
      if (! TestForEquality(filePath, StringComparison.CurrentCultureIgnoreCase))
         Console.WriteLine("Access to {0} is allowed.", filePath);
      else
         Console.WriteLine("Access to {0} is not allowed.", filePath);
      
      Console.WriteLine("\nOrdinal test for equality:");
      if (! TestForEquality(filePath, StringComparison.OrdinalIgnoreCase))
         Console.WriteLine("Access to {0} is allowed.", filePath);
      else
         Console.WriteLine("Access to {0} is not allowed.", filePath);
   }

   private static bool TestForEquality(string str, StringComparison cmp)
   {
      int position = str.IndexOf("://");
      if (position < 0) return false;

      string substring = str.Substring(0, position);  
      return substring.Equals("FILE", cmp);
   }
}
// The example displays the following output:
//       Culture-sensitive test for equality:
//       Access to file://c:/notes.txt is allowed.
//       
//       Ordinal test for equality:
//       Access to file://c:/notes.txt is not allowed.
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("tr-TR")      

      Dim filePath As String = "file://c:/notes.txt"
      
      Console.WriteLine("Culture-sensitive test for equality:")
      If Not TestForEquality(filePath, StringComparison.CurrentCultureIgnoreCase) Then
         Console.WriteLine("Access to {0} is allowed.", filePath)
      Else
         Console.WriteLine("Access to {0} is not allowed.", filePath)
      End If       
      Console.WriteLine()
      
      Console.WriteLine("Ordinal test for equality:")
      If Not TestForEquality(filePath, StringComparison.OrdinalIgnoreCase) Then
         Console.WriteLine("Access to {0} is allowed.", filePath)
      Else
         Console.WriteLine("Access to {0} is not allowed.", filePath)
      End If       
   End Sub
   
   Private Function TestForEquality(str As String, cmp As StringComparison) As Boolean
      Dim position As Integer = str.IndexOf("://")
      If position < 0 Then Return False

      Dim substring As String = str.Substring(0, position)  
      Return substring.Equals("FILE", cmp)
   End Function
End Module
' The example displays the following output:
'       Culture-sensitive test for equality:
'       Access to file://c:/notes.txt is allowed.
'       
'       Ordinal test for equality:
'       Access to file://c:/notes.txt is not allowed.

НормализацияNormalization

Некоторые символы Юникода, имеют несколько представлений.Some Unicode characters have multiple representations. Например любой из следующих кодовых точек может представлять имя символа «ắ»:For example, any of the following code points can represent the letter "ắ":

  • U+1EAFU+1EAF

  • U+0103 U+0301U+0103 U+0301

  • U+0061 U+0306 U+0301U+0061 U+0306 U+0301

Несколько представлений для одного символа усложнить поиск, сортировка, сопоставления и других операций со строками.Multiple representations for a single character complicate searching, sorting, matching, and other string operations.

В стандарте Юникод определяет процесс, называемый нормализация, которая возвращает одно двоичное представление символа Юникода для любого из его эквивалентных представлений.The Unicode standard defines a process called normalization that returns one binary representation of a Unicode character for any of its equivalent binary representations. Нормализация можно использовать несколько алгоритмов, вызывается нормализации, появившиеся формы разные правила.Normalization can use several algorithms, called normalization forms, that follow different rules. Платформа .NET поддерживает формы нормализации Юникода C, D, KC и KD..NET supports Unicode normalization forms C, D, KC, and KD. Когда строки были нормализованы по той же форме нормализации, их можно проверять с помощью порядковое сравнение.When strings have been normalized to the same normalization form, they can be compared by using ordinal comparison.

Порядковое сравнение — это двоичное сравнение скалярного значения Юникода, из соответствующего Char объектов в каждой строке.An ordinal comparison is a binary comparison of the Unicode scalar value of corresponding Char objects in each string. String Содержит ряд методов, которые можно выполнить порядковое сравнение, включая следующие:The String class includes a number of methods that can perform an ordinal comparison, including the following:

Можно определить нормализуется ли строка в форме нормализации Юникода C, вызвав String.IsNormalized() метод, либо вызвать String.IsNormalized(NormalizationForm) метод, чтобы определить, является ли строка нормализованным в форму нормализации, указанной.You can determine whether a string is normalized to normalization form C by calling the String.IsNormalized() method, or you can call the String.IsNormalized(NormalizationForm) method to determine whether a string is normalized to a specified normalization form. Можно также вызвать String.Normalize() можно вызвать метод для преобразования строки в форме нормализации Юникода C, или String.Normalize(NormalizationForm) метод для преобразования строки в указанной форму.You can also call the String.Normalize() method to convert a string to normalization form C, or you can call the String.Normalize(NormalizationForm) method to convert a string to a specified normalization form. Пошаговые инструкции по нормализация и сравнения строк см. в разделе Normalize() и Normalize(NormalizationForm) методы.For step-by-step information about normalizing and comparing strings, see the Normalize() and Normalize(NormalizationForm) methods.

Следующий простой пример иллюстрирует нормализацией строк.The following simple example illustrates string normalization. Он определяет букву «ố» тремя разными способами в трех разных строк и использует порядковое сравнение на предмет равенства, чтобы определить, что каждая строка отличается от других двух строк.It defines the letter "ố" in three different ways in three different strings, and uses an ordinal comparison for equality to determine that each string differs from the other two strings. Затем преобразует каждую строку в формах поддерживаемых нормализации и снова выполняет порядковое сравнение каждой строки в форме нормализации, указанной.It then converts each string to the supported normalization forms, and again performs an ordinal comparison of each string in a specified normalization form. В каждом случае второй тест для проверки на равенство показано, что строки равны.In each case, the second test for equality shows that the strings are equal.

using namespace System;
using namespace System::Globalization;
using namespace System::IO;
using namespace System::Text;

public ref class Example
{
private:
   StreamWriter^ sw;

   void TestForEquality(... array<String^>^  words)
   {
      for (int ctr = 0; ctr <= words->Length - 2; ctr++)
         for (int ctr2 = ctr + 1; ctr2 <= words->Length - 1; ctr2++) 
            sw->WriteLine("{0} ({1}) = {2} ({3}): {4}", 
                         words[ctr], ShowBytes(words[ctr]),
                         words[ctr2], ShowBytes(words[ctr2]),
                         words[ctr]->Equals(words[ctr2], StringComparison::Ordinal));
   }

   String^ ShowBytes(String^ str)
   {
      String^ result = nullptr;
      for each (Char ch in str)
         result += String::Format("{0} ", Convert::ToUInt16(ch).ToString("X4")); 
      return result->Trim();            
   } 

   array<String^>^ NormalizeStrings(NormalizationForm nf, ... array<String^>^ words)
   {
      for (int ctr = 0; ctr < words->Length; ctr++)
         if (! words[ctr]->IsNormalized(nf))
            words[ctr] = words[ctr]->Normalize(nf); 
      return words;   
   }

public: 
   void Execute()
   {
      sw = gcnew StreamWriter(".\\TestNorm1.txt");

      // Define three versions of the same word.  
      String^ s1 = L"sống";        // create word with U+1ED1 
      String^ s2 = L"s\x00F4\x0301ng";
      String^ s3 = L"so\x0302\x0301ng";

      TestForEquality(s1, s2, s3);      
      sw->WriteLine();

      // Normalize and compare strings using each normalization form. 
      for each (String^ formName in Enum::GetNames(NormalizationForm::typeid))
      {
         sw->WriteLine("Normalization {0}:\n", formName); 
         NormalizationForm nf = (NormalizationForm) Enum::Parse(NormalizationForm::typeid, formName);
         array<String^>^ sn = NormalizeStrings(nf, s1, s2, s3 );
         TestForEquality(sn);           
         sw->WriteLine("\n");                                        
      }

      sw->Close(); 
   }
};

void main()
{
   Example^ ex = gcnew Example();
   ex->Execute();
}
// The example produces the following output:
// The example displays the following output: 
//       sống (0073 1ED1 006E 0067) = sống (0073 00F4 0301 006E 0067): False 
//       sống (0073 1ED1 006E 0067) = sống (0073 006F 0302 0301 006E 0067): False 
//       sống (0073 00F4 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): False 
//        
//       Normalization FormC: 
//        
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True 
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True 
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True 
//        
//        
//       Normalization FormD: 
//        
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True 
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True 
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True 
//        
//        
//       Normalization FormKC: 
//        
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True 
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True 
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True 
//        
//        
//       Normalization FormKD: 
//        
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True 
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True 
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
using System;
using System.Globalization;
using System.IO;
using System.Text;

public class Example
{
   private static StreamWriter sw;
   
   public static void Main()
   {
      sw = new StreamWriter(@".\TestNorm1.txt");

      // Define three versions of the same word. 
      string s1 = "sống";        // create word with U+1ED1
      string s2 = "s\u00F4\u0301ng";
      string s3 = "so\u0302\u0301ng";

      TestForEquality(s1, s2, s3);      
      sw.WriteLine();

      // Normalize and compare strings using each normalization form.
      foreach (string formName in Enum.GetNames(typeof(NormalizationForm)))
      {
         sw.WriteLine("Normalization {0}:\n", formName); 
         NormalizationForm nf = (NormalizationForm) Enum.Parse(typeof(NormalizationForm), formName);
         string[] sn = NormalizeStrings(nf, s1, s2, s3);
         TestForEquality(sn);           
         sw.WriteLine("\n");                                        
      }
      
      sw.Close();   
   }

   private static void TestForEquality(params string[] words)
   {
      for (int ctr = 0; ctr <= words.Length - 2; ctr++)
         for (int ctr2 = ctr + 1; ctr2 <= words.Length - 1; ctr2++) 
            sw.WriteLine("{0} ({1}) = {2} ({3}): {4}", 
                         words[ctr], ShowBytes(words[ctr]),
                         words[ctr2], ShowBytes(words[ctr2]),
                         words[ctr].Equals(words[ctr2], StringComparison.Ordinal));
   }

   private static string ShowBytes(string str)
   {
      string result = null;
      foreach (var ch in str)
         result += String.Format("{0} ", Convert.ToUInt16(ch).ToString("X4")); 
      return result.Trim();            
   } 
   
   private static string[] NormalizeStrings(NormalizationForm nf, params string[] words)
   {
      for (int ctr = 0; ctr < words.Length; ctr++)
         if (! words[ctr].IsNormalized(nf))
            words[ctr] = words[ctr].Normalize(nf); 
      return words;   
   }
}
// The example displays the following output:
//       sống (0073 1ED1 006E 0067) = sống (0073 00F4 0301 006E 0067): False
//       sống (0073 1ED1 006E 0067) = sống (0073 006F 0302 0301 006E 0067): False
//       sống (0073 00F4 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): False
//       
//       Normalization FormC:
//       
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
//       
//       
//       Normalization FormD:
//       
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
//       
//       
//       Normalization FormKC:
//       
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
//       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
//       
//       
//       Normalization FormKD:
//       
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
//       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
Imports System.Globalization
Imports System.IO
Imports System.Text

Module Example
   Private sw As StreamWriter
       
   Public Sub Main()
      sw = New StreamWriter(".\TestNorm1.txt")

      ' Define three versions of the same word. 
      Dim s1 As String = "sống"        ' create word with U+1ED1
      Dim s2 AS String = "s" + ChrW(&h00F4) + ChrW(&h0301) + "ng"
      Dim s3 As String = "so" + ChrW(&h0302) + ChrW(&h0301) + "ng"

      TestForEquality(s1, s2, s3)      
      sw.WriteLine()

      ' Normalize and compare strings using each normalization form.
      For Each formName In [Enum].GetNames(GetType(NormalizationForm))
         sw.WriteLine("Normalization {0}:", formName) 
         Dim nf As NormalizationForm = CType([Enum].Parse(GetType(NormalizationForm), formName),  
                                             NormalizationForm)
         Dim sn() As String = NormalizeStrings(nf, s1, s2, s3)
         TestForEquality(sn)           
         sw.WriteLine(vbCrLf)                                        
      Next
      
      sw.Close()   
   End Sub

   Private Sub TestForEquality(ParamArray words As String())
      For ctr As Integer = 0 To words.Length - 2
         For ctr2 As Integer = ctr + 1 To words.Length - 1 
            sw.WriteLine("{0} ({1}) = {2} ({3}): {4}", 
                         words(ctr), ShowBytes(words(ctr)),
                         words(ctr2), ShowBytes(words(ctr2)),
                         words(ctr).Equals(words(ctr2), StringComparison.Ordinal))
         Next                
      Next   
   End Sub

   Private Function ShowBytes(str As String) As String
      Dim result As String = Nothing
      For Each ch In str
         result += String.Format("{0} ", Convert.ToUInt16(ch).ToString("X4")) 
      Next
      Return result.Trim()            
   End Function  
   
   Private Function NormalizeStrings(nf As NormalizationForm, ParamArray words() As String) As String()
      For ctr As Integer = 0 To words.Length - 1
         If Not words(ctr).IsNormalized(nf) Then
            words(ctr) = words(ctr).Normalize(nf)
         End If    
      Next
      Return words   
   End Function
End Module
' The example displays the following output:
'       sống (0073 1ED1 006E 0067) = sống (0073 00F4 0301 006E 0067): False
'       sống (0073 1ED1 006E 0067) = sống (0073 006F 0302 0301 006E 0067): False
'       sống (0073 00F4 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): False
'       
'       Normalization FormC:
'       
'       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
'       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
'       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
'       
'       
'       Normalization FormD:
'       
'       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
'       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
'       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
'       
'       
'       Normalization FormKC:
'       
'       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
'       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
'       sống (0073 1ED1 006E 0067) = sống (0073 1ED1 006E 0067): True
'       
'       
'       Normalization FormKD:
'       
'       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
'       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True
'       sống (0073 006F 0302 0301 006E 0067) = sống (0073 006F 0302 0301 006E 0067): True

Дополнительные сведения о нормализации и формы нормализации, см. в разделе System.Text.NormalizationForm, а также Unicode Standard Annex #15: Формы нормализации Юникода и нормализация часто задаваемые вопросы о кодовые веб-сайта.For more information about normalization and normalization forms, see System.Text.NormalizationForm, as well as Unicode Standard Annex #15: Unicode Normalization Forms and the Normalization FAQ on the unicode.org website.

Операции со строками по категориямString operations by category

String Класс предоставляет члены для сравнения строк, проверка строк на равенство, поиска символов или подстроки в строке, изменения строки, извлечение подстрок из строки, объединения строк, форматирование значений, копирования строки, и Нормализация строки.The String class provides members for comparing strings, testing strings for equality, finding characters or substrings in a string, modifying a string, extracting substrings from a string, combining strings, formatting values, copying a string, and normalizing a string.

Сравнение строкComparing strings

Можно сравнивать строки, чтобы определить их относительное положение в порядке сортировки, с помощью следующих String методы:You can compare strings to determine their relative position in the sort order by using the following String methods:

  • Compare Возвращает целое число, показывающее связь между одной строки в строку второй в порядке сортировки.Compare returns an integer that indicates the relationship of one string to a second string in the sort order.

  • CompareOrdinal Возвращает целое число, показывающее связь между одной строки на второй строку на основе сравнения кодовых позиций.CompareOrdinal returns an integer that indicates the relationship of one string to a second string based on a comparison of their code points.

  • CompareTo Возвращает целое число, показывающее связь между текущего экземпляра строки в строку второй в порядке сортировки.CompareTo returns an integer that indicates the relationship of the current string instance to a second string in the sort order. CompareTo(String) Предоставляет метод IComparable и IComparable<T> реализации для String класса.The CompareTo(String) method provides the IComparable and IComparable<T> implementations for the String class.

Проверка строк на равенствоTesting strings for equality

Вы вызываете Equals метод, чтобы определить, равны ли две строки.You call the Equals method to determine whether two strings are equal. Экземпляр Equals(String, String, StringComparison) и статических Equals(String, StringComparison) перегрузки позволяют задать ли сравнение с учетом языка и региональных параметров символов или порядковый номер, и считается или учитывается регистр.The instance Equals(String, String, StringComparison) and the static Equals(String, StringComparison) overloads let you specify whether the comparison is culture-sensitive or ordinal, and whether case is considered or ignored. Является порядковым большинство тестов на предмет равенства и сравнения на равенство, которые определяют доступ к ресурсу системы (например, объект файловой системы) всегда должны быть порядковый номер.Most tests for equality are ordinal, and comparisons for equality that determine access to a system resource (such as a file system object) should always be ordinal.

Поиск символов в строкеFinding characters in a string

String Класс включает два вида методов поиска:The String class includes two kinds of search methods:

  • Методы, возвращающие Boolean значение, указывающее, присутствует ли в экземпляре строка определенной подстрокой.Methods that return a Boolean value to indicate whether a particular substring is present in a string instance. К ним относятся Contains, EndsWith, и StartsWith методы.These include the Contains, EndsWith, and StartsWith methods.

  • Методы, которые указывают Начальная позиция подстроки в экземпляре строки.Methods that indicate the starting position of a substring in a string instance. К ним относятся IndexOf, IndexOfAny, LastIndexOf, и LastIndexOfAny методы.These include the IndexOf, IndexOfAny, LastIndexOf, and LastIndexOfAny methods.

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

Если вам требуется выполнить поиск строки определенный шаблон, а не конкретной подстроки, следует использовать регулярные выражения.If you want to search a string for a particular pattern rather than a specific substring, you should use regular expressions. Дополнительные сведения см. в разделе регулярных выражений .NET.For more information, see .NET Regular Expressions.

Изменения строкиModifying a string

String Класс включает следующие методы, которые могут изменить значение строки:The String class includes the following methods that appear to modify the value of a string:

  • Insert Вставляет строку в текущую String экземпляра.Insert inserts a string into the current String instance.

  • PadLeft Вставляет один или несколько вхождений указанный символ в начале строки.PadLeft inserts one or more occurrences of a specified character at the beginning of a string.

  • PadRight Вставляет один или несколько вхождений указанного символа в конце строки.PadRight inserts one or more occurrences of a specified character at the end of a string.

  • Remove Удаляет из текущего подстроки String экземпляра.Remove deletes a substring from the current String instance.

  • Replace заменяет подстроку другой подстрокой в текущем String экземпляра.Replace replaces a substring with another substring in the current String instance.

  • ToLower и ToLowerInvariant преобразования всех символов в строке в нижний регистр.ToLower and ToLowerInvariant convert all the characters in a string to lowercase.

  • ToUpper и ToUpperInvariant преобразования всех символов в строке в верхний регистр.ToUpper and ToUpperInvariant convert all the characters in a string to uppercase.

  • Trim Удаляет все вхождения знака в начале и конце строки.Trim removes all occurrences of a character from the beginning and end of a string.

  • TrimEnd Удаляет все вхождения знака в конце строки.TrimEnd removes all occurrences of a character from the end of a string.

  • TrimStart Удаляет все вхождения знака с начала строки.TrimStart removes all occurrences of a character from the beginning of a string.

Важно!

Все методы изменения строк возвращают новый String объекта.All string modification methods return a new String object. Они не изменяют значение текущего экземпляра.They don't modify the value of the current instance.

Извлечение подстрок из строкиExtracting substrings from a string

String.Split Метод разделяет одну строку на несколько строк.The String.Split method separates a single string into multiple strings. Перегрузки метода позволяют указать несколько разделителей, чтобы определить максимальное число подстрок, метод извлекает и для определения, включены ли пустые строки (которые происходят, когда разделители являются смежными) между возвращенные строки.Overloads of the method allow you to specify multiple delimiters, to determine the maximum number of substrings that the method extracts, and to determine whether empty strings (which occur when delimiters are adjacent) are included among the returned strings.

Объединение строкCombining strings

Следующие String методы могут использоваться для объединения строк:The following String methods can be used for string concatenation:

  • Concat объединяет один или несколько подстрок в одну строку.Concat combines one or more substrings into a single string.

  • Join объединяет один или несколько подстрок в один элемент и добавляет разделитель между каждой подстроке.Join concatenates one or more substrings into a single element and adds a separator between each substring.

Форматирование значенийFormatting values

String.Format Метод использует составное форматирование, чтобы заменить один или несколько заполнителей в строке строковым представлением некоторые объект или значение.The String.Format method uses the composite formatting feature to replace one or more placeholders in a string with the string representation of some object or value. Format Метод часто используется для следующих целей:The Format method is often used to do the following:

  • Для внедрения строковое представление числового значения в строку.To embed the string representation of a numeric value in a string.

  • Для внедрения строковое представление значения даты и времени в строку.To embed the string representation of a date and time value in a string.

  • Для внедрения строковое представление значения перечисления в строку.To embed the string representation of an enumeration value in a string.

  • Для внедрения строковым представлением некоторый объект, который поддерживает IFormattable интерфейс в строке.To embed the string representation of some object that supports the IFormattable interface in a string.

  • К правому краю или по ширине слева подстроки в поле в строку большего размера.To right-justify or left-justify a substring in a field within a larger string.

Подробные сведения о форматировании операций и примеры см. в разделе Format перегружать Сводка.For detailed information about formatting operations and examples, see the Format overload summary.

Копирование строкиCopying a string

Вы можете вызвать следующий String методы, чтобы скопировать строки:You can call the following String methods to make a copy of a string:

  • Clone Возвращает ссылку на существующий String объекта.Clone returns a reference to an existing String object.

  • Copy Создает копию существующей строки.Copy creates a copy of an existing string.

  • CopyTo копирует часть строки в массив символов.CopyTo copies a portion of a string to a character array.

Нормализация строкиNormalizing a string

В кодировке Юникод один символ может иметь несколько кодовых точек.In Unicode, a single character can have multiple code points. Нормализация преобразует эти эквивалентные им знаки в том же двоичное представление.Normalization converts these equivalent characters into the same binary representation. String.Normalize Метод выполняет, нормализация и String.IsNormalized метод определяет, является ли строка нормализованным.The String.Normalize method performs the normalization, and the String.IsNormalized method determines whether a string is normalized.

Дополнительные сведения и пример см. в разделе нормализации подразделе данного раздела.For more information and an example, see the Normalization section earlier in this topic.

Конструкторы

String(Char*) String(Char*) String(Char*) String(Char*)

Инициализирует новый экземпляр класса String значением, определенным указателем на массив знаков Юникода.Initializes a new instance of the String class to the value indicated by a specified pointer to an array of Unicode characters.

String(Char*, Int32, Int32) String(Char*, Int32, Int32) String(Char*, Int32, Int32) String(Char*, Int32, Int32)

Инициализирует новый экземпляр класса String значением, которое определяется заданным указателем на массив знаков Юникода, начальной позицией знака в этом массиве и длиной.Initializes a new instance of the String class to the value indicated by a specified pointer to an array of Unicode characters, a starting character position within that array, and a length.

String(Char, Int32) String(Char, Int32) String(Char, Int32) String(Char, Int32)

Инициализирует новый экземпляр класса String значением, полученным путем повторения заданного знака Юникода указанное число раз.Initializes a new instance of the String class to the value indicated by a specified Unicode character repeated a specified number of times.

String(Char[]) String(Char[]) String(Char[]) String(Char[])

Инициализирует новый экземпляр класса String значением, заданным в виде массива знаков Юникода.Initializes a new instance of the String class to the value indicated by an array of Unicode characters.

String(Char[], Int32, Int32) String(Char[], Int32, Int32) String(Char[], Int32, Int32) String(Char[], Int32, Int32)

Инициализирует новый экземпляр класса String значением, заданным массивом знаков Юникода, начальной позицией знака в пределах данного массива и длиной.Initializes a new instance of the String class to the value indicated by an array of Unicode characters, a starting character position within that array, and a length.

String(ReadOnlySpan<Char>) String(ReadOnlySpan<Char>) String(ReadOnlySpan<Char>) String(ReadOnlySpan<Char>)
String(SByte*) String(SByte*) String(SByte*) String(SByte*)

Инициализирует новый экземпляр класса String значением, определенным указателем на массив 8-разрядных целых чисел со знаком.Initializes a new instance of the String class to the value indicated by a pointer to an array of 8-bit signed integers.

String(SByte*, Int32, Int32) String(SByte*, Int32, Int32) String(SByte*, Int32, Int32) String(SByte*, Int32, Int32)

Инициализирует новый экземпляр класса String значением, определяемым заданным указателем на массив 8-разрядных целых чисел со знаком, начальной позицией в пределах массива и длиной.Initializes a new instance of the String class to the value indicated by a specified pointer to an array of 8-bit signed integers, a starting position within that array, and a length.

String(SByte*, Int32, Int32, Encoding) String(SByte*, Int32, Int32, Encoding) String(SByte*, Int32, Int32, Encoding) String(SByte*, Int32, Int32, Encoding)

Инициализирует новый экземпляр класса String значением, определенным заданным указателем на массив 8-разрядных целых чисел со знаком, начальной позицией в пределах этого массива, длиной и объектом Encoding.Initializes a new instance of the String class to the value indicated by a specified pointer to an array of 8-bit signed integers, a starting position within that array, a length, and an Encoding object.

Поля

Empty Empty Empty Empty

Представляет пустую строку.Represents the empty string. Это поле доступно только для чтения.This field is read-only.

Свойства

Chars[Index] Chars[Index] Chars[Index] Chars[Index]
Chars[Int32] Chars[Int32] Chars[Int32] Chars[Int32]

Возвращает объект Char в указанной позиции в текущем объекте String.Gets the Char object at a specified position in the current String object.

Chars[Range] Chars[Range] Chars[Range] Chars[Range]
Length Length Length Length

Возвращает число знаков в текущем объекте String.Gets the number of characters in the current String object.

Методы

Clone() Clone() Clone() Clone()

Возвращает ссылку на данный экземпляр класса String.Returns a reference to this instance of String.

Compare(String, Int32, String, Int32, Int32) Compare(String, Int32, String, Int32, Int32) Compare(String, Int32, String, Int32, Int32) Compare(String, Int32, String, Int32, Int32)

Сравнивает подстроки двух указанных объектов String и возвращает целое число, которое показывает их относительное положение в порядке сортировки.Compares substrings of two specified String objects and returns an integer that indicates their relative position in the sort order.

Compare(String, Int32, String, Int32, Int32, Boolean) Compare(String, Int32, String, Int32, Int32, Boolean) Compare(String, Int32, String, Int32, Int32, Boolean) Compare(String, Int32, String, Int32, Int32, Boolean)

Сравнивает подстроки двух заданных объектов String (с учетом или без учета регистра) и возвращает целое число, которое показывает их относительное положение в порядке сортировки.Compares substrings of two specified String objects, ignoring or honoring their case, and returns an integer that indicates their relative position in the sort order.

Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo) Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo) Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo) Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)

Сравнивает подстроки двух заданных объектов String (с учетом или без учета регистра), используя сведения о языке и региональных параметрах, и возвращает целое число, которое показывает их относительное положение в порядке сортировки.Compares substrings of two specified String objects, ignoring or honoring their case and using culture-specific information to influence the comparison, and returns an integer that indicates their relative position in the sort order.

Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions)

Сравнивает подстроки двух заданных объектов String, используя указанные параметры сравнения и сведения о языке и региональных параметрах, которые влияют на сравнение, и возвращает целое число, показывающее связь между двумя подстроками в порядке сортировки.Compares substrings of two specified String objects using the specified comparison options and culture-specific information to influence the comparison, and returns an integer that indicates the relationship of the two substrings to each other in the sort order.

Compare(String, Int32, String, Int32, Int32, StringComparison) Compare(String, Int32, String, Int32, Int32, StringComparison) Compare(String, Int32, String, Int32, Int32, StringComparison) Compare(String, Int32, String, Int32, Int32, StringComparison)

Сравнивает подстроки двух указанных объектов String с использованием заданных правил и возвращает целое число, которое показывает их относительное положение в порядке сортировки.Compares substrings of two specified String objects using the specified rules, and returns an integer that indicates their relative position in the sort order.

Compare(String, String) Compare(String, String) Compare(String, String) Compare(String, String)

Сравнивает два указанных объекта String и возвращает целое число, которое показывает их относительное положение в порядке сортировки.Compares two specified String objects and returns an integer that indicates their relative position in the sort order.

Compare(String, String, Boolean) Compare(String, String, Boolean) Compare(String, String, Boolean) Compare(String, String, Boolean)

Сравнивает два указанных объекта String (с учетом или без учета регистра) и возвращает целое число, которое показывает их относительное положение в порядке сортировки.Compares two specified String objects, ignoring or honoring their case, and returns an integer that indicates their relative position in the sort order.

Compare(String, String, Boolean, CultureInfo) Compare(String, String, Boolean, CultureInfo) Compare(String, String, Boolean, CultureInfo) Compare(String, String, Boolean, CultureInfo)

Сравнивает два указанных объекта String (с учетом или без учета регистра), используя сведения о языке и региональных параметрах, и возвращает целое число, которое показывает их относительное положение в порядке сортировки.Compares two specified String objects, ignoring or honoring their case, and using culture-specific information to influence the comparison, and returns an integer that indicates their relative position in the sort order.

Compare(String, String, CultureInfo, CompareOptions) Compare(String, String, CultureInfo, CompareOptions) Compare(String, String, CultureInfo, CompareOptions) Compare(String, String, CultureInfo, CompareOptions)

Сравнивает два заданных объекта String, используя указанные параметры сравнения и сведения о языке и региональных параметрах, которые влияют на сравнение, и возвращает целое число, показывающее связь между двумя строками в порядке сортировки.Compares two specified String objects using the specified comparison options and culture-specific information to influence the comparison, and returns an integer that indicates the relationship of the two strings to each other in the sort order.

Compare(String, String, StringComparison) Compare(String, String, StringComparison) Compare(String, String, StringComparison) Compare(String, String, StringComparison)

Сравнивает два указанных объекта String с использованием заданных правил и возвращает целое число, которое показывает их относительное положение в порядке сортировки.Compares two specified String objects using the specified rules, and returns an integer that indicates their relative position in the sort order.

CompareOrdinal(String, Int32, String, Int32, Int32) CompareOrdinal(String, Int32, String, Int32, Int32) CompareOrdinal(String, Int32, String, Int32, Int32) CompareOrdinal(String, Int32, String, Int32, Int32)

Сравнивает подстроки двух указанных объектов String, вычисляя числовые значения соответствующих объектов Char в каждой подстроке.Compares substrings of two specified String objects by evaluating the numeric values of the corresponding Char objects in each substring.

CompareOrdinal(String, String) CompareOrdinal(String, String) CompareOrdinal(String, String) CompareOrdinal(String, String)

Сравнивает два указанных объекта String, оценивая числовые значения соответствующих объектов Char в каждой строке.Compares two specified String objects by evaluating the numeric values of the corresponding Char objects in each string.

CompareTo(Object) CompareTo(Object) CompareTo(Object) CompareTo(Object)

Сравнивает данный экземпляр с указанным объектом Object и показывает, расположен ли экземпляр перед, после или в той же позиции в порядке сортировки, что и заданный объект Object.Compares this instance with a specified Object and indicates whether this instance precedes, follows, or appears in the same position in the sort order as the specified Object.

CompareTo(String) CompareTo(String) CompareTo(String) CompareTo(String)

Сравнивает данный экземпляр с заданным объектом String и показывает, расположен ли данный экземпляр перед, после или на той же позиции в порядке сортировки, что и заданная строка.Compares this instance with a specified String object and indicates whether this instance precedes, follows, or appears in the same position in the sort order as the specified string.

Concat(IEnumerable<String>) Concat(IEnumerable<String>) Concat(IEnumerable<String>) Concat(IEnumerable<String>)

Сцепляет элементы созданной коллекции IEnumerable<T> типа String.Concatenates the members of a constructed IEnumerable<T> collection of type String.

Concat(Object) Concat(Object) Concat(Object) Concat(Object)

Создает строковое представление указанного объекта.Creates the string representation of a specified object.

Concat(Object, Object) Concat(Object, Object) Concat(Object, Object) Concat(Object, Object)

Сцепляет строковые представления двух указанных объектов.Concatenates the string representations of two specified objects.

Concat(Object, Object, Object) Concat(Object, Object, Object) Concat(Object, Object, Object) Concat(Object, Object, Object)

Сцепляет строковые представления трех указанных объектов.Concatenates the string representations of three specified objects.

Concat(Object, Object, Object, Object) Concat(Object, Object, Object, Object) Concat(Object, Object, Object, Object) Concat(Object, Object, Object, Object)

Сцепляет строковые представления четырех указанных объектов и любые объекты, заданные в необязательном списке параметров переменной длины.Concatenates the string representations of four specified objects and any objects specified in an optional variable length parameter list.

Concat(Object[]) Concat(Object[]) Concat(Object[]) Concat(Object[])

Сцепляет строковые представления элементов указанного массива Object.Concatenates the string representations of the elements in a specified Object array.

Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>)
Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)
Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) Concat(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)
Concat(String, String) Concat(String, String) Concat(String, String) Concat(String, String)

Сцепляет два указанных экземпляра String.Concatenates two specified instances of String.

Concat(String, String, String) Concat(String, String, String) Concat(String, String, String) Concat(String, String, String)

Сцепляет три указанных экземпляра String.Concatenates three specified instances of String.

Concat(String, String, String, String) Concat(String, String, String, String) Concat(String, String, String, String) Concat(String, String, String, String)

Сцепляет четыре указанных экземпляра String.Concatenates four specified instances of String.

Concat(String[]) Concat(String[]) Concat(String[]) Concat(String[])

Сцепляет элементы указанного массива String.Concatenates the elements of a specified String array.

Concat<T>(IEnumerable<T>) Concat<T>(IEnumerable<T>) Concat<T>(IEnumerable<T>) Concat<T>(IEnumerable<T>)

Сцепляет элементы реализации IEnumerable<T>.Concatenates the members of an IEnumerable<T> implementation.

Contains(Char) Contains(Char) Contains(Char) Contains(Char)
Contains(Char, StringComparison) Contains(Char, StringComparison) Contains(Char, StringComparison) Contains(Char, StringComparison)
Contains(String) Contains(String) Contains(String) Contains(String)

Возвращает значение, указывающее, встречается ли указанная подстрока внутри этой строки.Returns a value indicating whether a specified substring occurs within this string.

Contains(String, StringComparison) Contains(String, StringComparison) Contains(String, StringComparison) Contains(String, StringComparison)
Copy(String) Copy(String) Copy(String) Copy(String)

Создает экземпляр String, имеющий то же значение, что и указанный экземпляр String.Creates a new instance of String with the same value as a specified String.

CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32)

Копирует заданное число знаков, начиная с указанной позиции в этом экземпляре до указанной позиции в массиве знаков Юникода.Copies a specified number of characters from a specified position in this instance to a specified position in an array of Unicode characters.

Create<TState>(Int32, TState, SpanAction<Char,TState>) Create<TState>(Int32, TState, SpanAction<Char,TState>) Create<TState>(Int32, TState, SpanAction<Char,TState>) Create<TState>(Int32, TState, SpanAction<Char,TState>)
EndsWith(Char) EndsWith(Char) EndsWith(Char) EndsWith(Char)
EndsWith(String) EndsWith(String) EndsWith(String) EndsWith(String)

Определяет, совпадает ли конец данного экземпляра строки с указанной строкой.Determines whether the end of this string instance matches the specified string.

EndsWith(String, Boolean, CultureInfo) EndsWith(String, Boolean, CultureInfo) EndsWith(String, Boolean, CultureInfo) EndsWith(String, Boolean, CultureInfo)

Определяет, совпадает ли конец данного экземпляра строки с заданной строкой при сравнении с учетом заданного языка и региональных параметров.Determines whether the end of this string instance matches the specified string when compared using the specified culture.

EndsWith(String, StringComparison) EndsWith(String, StringComparison) EndsWith(String, StringComparison) EndsWith(String, StringComparison)

Определяет, совпадает ли конец экземпляра строки с заданной строкой при сравнении с учетом заданного параметра сравнения.Determines whether the end of this string instance matches the specified string when compared using the specified comparison option.

EnumerateRunes() EnumerateRunes() EnumerateRunes() EnumerateRunes()
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равны ли значения этого экземпляра и указанного объекта, который также должен быть объектом String.Determines whether this instance and a specified object, which must also be a String object, have the same value.

Equals(String) Equals(String) Equals(String) Equals(String)

Определяет, равны ли значения этого экземпляра и указанного объекта String.Determines whether this instance and another specified String object have the same value.

Equals(String, String) Equals(String, String) Equals(String, String) Equals(String, String)

Определяет, совпадают ли значения двух указанных объектов String.Determines whether two specified String objects have the same value.

Equals(String, String, StringComparison) Equals(String, String, StringComparison) Equals(String, String, StringComparison) Equals(String, String, StringComparison)

Определяет, совпадают ли значения двух указанных объектов String.Determines whether two specified String objects have the same value. Параметр определяет язык и региональные параметры, учет регистра и правила сортировки, используемые при сравнении.A parameter specifies the culture, case, and sort rules used in the comparison.

Equals(String, StringComparison) Equals(String, StringComparison) Equals(String, StringComparison) Equals(String, StringComparison)

Определяет, равны ли значения этой строки и указанного объекта String.Determines whether this string and a specified String object have the same value. Параметр определяет язык и региональные параметры, учет регистра и правила сортировки, используемые при сравнении.A parameter specifies the culture, case, and sort rules used in the comparison.

Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object)

Заменяет элементы формата в указанной строке строковым представлением соответствующего объекта.Replaces the format item or items in a specified string with the string representation of the corresponding object. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object)

Заменяет элементы формата в строке строковым представлением двух указанных объектов.Replaces the format items in a string with the string representation of two specified objects. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object)

Заменяет элементы формата в строке строковым представлением трех указанных объектов.Replaces the format items in a string with the string representation of three specified objects. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.An parameter supplies culture-specific formatting information.

Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[])

Заменяет элементы формата в строке строковым представлениями соответствующих объектов в указанном массиве.Replaces the format items in a string with the string representations of corresponding objects in a specified array. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

Format(String, Object) Format(String, Object) Format(String, Object) Format(String, Object)

Заменяет один или более элементов формата в строке строковым представлением указанного объекта.Replaces one or more format items in a string with the string representation of a specified object.

Format(String, Object, Object) Format(String, Object, Object) Format(String, Object, Object) Format(String, Object, Object)

Заменяет элементы формата в строке строковым представлением двух указанных объектов.Replaces the format items in a string with the string representation of two specified objects.

Format(String, Object, Object, Object) Format(String, Object, Object, Object) Format(String, Object, Object, Object) Format(String, Object, Object, Object)

Заменяет элементы формата в строке строковым представлением трех указанных объектов.Replaces the format items in a string with the string representation of three specified objects.

Format(String, Object[]) Format(String, Object[]) Format(String, Object[]) Format(String, Object[])

Заменяет элемент формата в указанной строке строковым представлением соответствующего объекта в указанном массиве.Replaces the format item in a specified string with the string representation of a corresponding object in a specified array.

GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

Извлекает объект, который может выполнять итерацию отдельных знаков данной строки.Retrieves an object that can iterate through the individual characters in this string.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Возвращает хэш-код для этой строки.Returns the hash code for this string.

GetHashCode(ReadOnlySpan<Char>) GetHashCode(ReadOnlySpan<Char>) GetHashCode(ReadOnlySpan<Char>) GetHashCode(ReadOnlySpan<Char>)
GetHashCode(ReadOnlySpan<Char>, StringComparison) GetHashCode(ReadOnlySpan<Char>, StringComparison) GetHashCode(ReadOnlySpan<Char>, StringComparison) GetHashCode(ReadOnlySpan<Char>, StringComparison)
GetHashCode(StringComparison) GetHashCode(StringComparison) GetHashCode(StringComparison) GetHashCode(StringComparison)
GetPinnableReference() GetPinnableReference() GetPinnableReference() GetPinnableReference()
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
GetTypeCode() GetTypeCode() GetTypeCode() GetTypeCode()

Возвращает TypeCode для класса String.Returns the TypeCode for class String.

IndexOf(Char) IndexOf(Char) IndexOf(Char) IndexOf(Char)

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке.Reports the zero-based index of the first occurrence of the specified Unicode character in this string.

IndexOf(Char, Int32) IndexOf(Char, Int32) IndexOf(Char, Int32) IndexOf(Char, Int32)

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке.Reports the zero-based index of the first occurrence of the specified Unicode character in this string. Поиск начинается с указанной позиции знака.The search starts at a specified character position.

IndexOf(Char, Int32, Int32) IndexOf(Char, Int32, Int32) IndexOf(Char, Int32, Int32) IndexOf(Char, Int32, Int32)

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа в данном экземпляре.Reports the zero-based index of the first occurrence of the specified character in this instance. Поиск начинается с указанной позиции знака; проверяется заданное количество позиций.The search starts at a specified character position and examines a specified number of character positions.

IndexOf(Char, StringComparison) IndexOf(Char, StringComparison) IndexOf(Char, StringComparison) IndexOf(Char, StringComparison)

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке.Reports the zero-based index of the first occurrence of the specified Unicode character in this string. Параметр определяет тип поиска заданного символа.A parameter specifies the type of search to use for the specified character.

IndexOf(String) IndexOf(String) IndexOf(String) IndexOf(String)

Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки в данном экземпляре.Reports the zero-based index of the first occurrence of the specified string in this instance.

IndexOf(String, Int32) IndexOf(String, Int32) IndexOf(String, Int32) IndexOf(String, Int32)

Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки в данном экземпляре.Reports the zero-based index of the first occurrence of the specified string in this instance. Поиск начинается с указанной позиции знака.The search starts at a specified character position.

IndexOf(String, Int32, Int32) IndexOf(String, Int32, Int32) IndexOf(String, Int32, Int32) IndexOf(String, Int32, Int32)

Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки в данном экземпляре.Reports the zero-based index of the first occurrence of the specified string in this instance. Поиск начинается с указанной позиции знака; проверяется заданное количество позиций.The search starts at a specified character position and examines a specified number of character positions.

IndexOf(String, Int32, Int32, StringComparison) IndexOf(String, Int32, Int32, StringComparison) IndexOf(String, Int32, Int32, StringComparison) IndexOf(String, Int32, Int32, StringComparison)

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String.Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметры задают начальную позицию поиска в текущей строке, количество проверяемых знаков текущей строки и тип поиска.Parameters specify the starting search position in the current string, the number of characters in the current string to search, and the type of search to use for the specified string.

IndexOf(String, Int32, StringComparison) IndexOf(String, Int32, StringComparison) IndexOf(String, Int32, StringComparison) IndexOf(String, Int32, StringComparison)

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String.Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметры задают начальную позицию поиска в текущей строке и тип поиска.Parameters specify the starting search position in the current string and the type of search to use for the specified string.

IndexOf(String, StringComparison) IndexOf(String, StringComparison) IndexOf(String, StringComparison) IndexOf(String, StringComparison)

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String.Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметр определяет тип поиска заданной строки.A parameter specifies the type of search to use for the specified string.

IndexOfAny(Char[]) IndexOfAny(Char[]) IndexOfAny(Char[]) IndexOfAny(Char[])

Возвращает индекс с отсчетом от нуля первого обнаруженного в данном экземпляре символа из указанного массива символов Юникода.Reports the zero-based index of the first occurrence in this instance of any character in a specified array of Unicode characters.

IndexOfAny(Char[], Int32) IndexOfAny(Char[], Int32) IndexOfAny(Char[], Int32) IndexOfAny(Char[], Int32)

Возвращает индекс с отсчетом от нуля первого обнаруженного в данном экземпляре символа из указанного массива символов Юникода.Reports the zero-based index of the first occurrence in this instance of any character in a specified array of Unicode characters. Поиск начинается с указанной позиции знака.The search starts at a specified character position.

IndexOfAny(Char[], Int32, Int32) IndexOfAny(Char[], Int32, Int32) IndexOfAny(Char[], Int32, Int32) IndexOfAny(Char[], Int32, Int32)

Возвращает индекс с отсчетом от нуля первого обнаруженного в данном экземпляре символа из указанного массива символов Юникода.Reports the zero-based index of the first occurrence in this instance of any character in a specified array of Unicode characters. Поиск начинается с указанной позиции знака; проверяется заданное количество позиций.The search starts at a specified character position and examines a specified number of character positions.

Insert(Int32, String) Insert(Int32, String) Insert(Int32, String) Insert(Int32, String)

Возвращает новую строку, в которой указанная строка вставляется в указанной позиции индекса в данном экземпляре.Returns a new string in which a specified string is inserted at a specified index position in this instance.

Intern(String) Intern(String) Intern(String) Intern(String)

Извлекает системную ссылку на указанный объект String.Retrieves the system's reference to the specified String.

IsInterned(String) IsInterned(String) IsInterned(String) IsInterned(String)

Извлекает ссылку на указанный объект String.Retrieves a reference to a specified String.

IsNormalized() IsNormalized() IsNormalized() IsNormalized()

Указывает, находится ли данная строка в форме нормализации Юникода C.Indicates whether this string is in Unicode normalization form C.

IsNormalized(NormalizationForm) IsNormalized(NormalizationForm) IsNormalized(NormalizationForm) IsNormalized(NormalizationForm)

Указывает, находится ли данная строка в заданной форме нормализации Юникода.Indicates whether this string is in the specified Unicode normalization form.

IsNullOrEmpty(String) IsNullOrEmpty(String) IsNullOrEmpty(String) IsNullOrEmpty(String)

Указывает, действительно ли указанная строка является строкой null или пустой строкой ("").Indicates whether the specified string is null or an empty string ("").

IsNullOrWhiteSpace(String) IsNullOrWhiteSpace(String) IsNullOrWhiteSpace(String) IsNullOrWhiteSpace(String)

Указывает, имеет ли указанная строка значение null, является ли она пустой строкой или строкой, состоящей только из символов-разделителей.Indicates whether a specified string is null, empty, or consists only of white-space characters.

Join(Char, Object[]) Join(Char, Object[]) Join(Char, Object[]) Join(Char, Object[])
Join(Char, String[]) Join(Char, String[]) Join(Char, String[]) Join(Char, String[])
Join(Char, String[], Int32, Int32) Join(Char, String[], Int32, Int32) Join(Char, String[], Int32, Int32) Join(Char, String[], Int32, Int32)
Join(String, IEnumerable<String>) Join(String, IEnumerable<String>) Join(String, IEnumerable<String>) Join(String, IEnumerable<String>)

Сцепляет элементы созданной коллекции IEnumerable<T> типа String, помещая между ними заданный разделитель.Concatenates the members of a constructed IEnumerable<T> collection of type String, using the specified separator between each member.

Join(String, Object[]) Join(String, Object[]) Join(String, Object[]) Join(String, Object[])

Сцепляет элементы массива объектов, помещая между ними заданный разделитель.Concatenates the elements of an object array, using the specified separator between each element.

Join(String, String[]) Join(String, String[]) Join(String, String[]) Join(String, String[])

Сцепляет все элементы массива строк, помещая между ними заданный разделитель.Concatenates all the elements of a string array, using the specified separator between each element.

Join(String, String[], Int32, Int32) Join(String, String[], Int32, Int32) Join(String, String[], Int32, Int32) Join(String, String[], Int32, Int32)

Сцепляет указанные элементы массива строк, помещая между ними заданный разделитель.Concatenates the specified elements of a string array, using the specified separator between each element.

Join<T>(Char, IEnumerable<T>) Join<T>(Char, IEnumerable<T>) Join<T>(Char, IEnumerable<T>) Join<T>(Char, IEnumerable<T>)
Join<T>(String, IEnumerable<T>) Join<T>(String, IEnumerable<T>) Join<T>(String, IEnumerable<T>) Join<T>(String, IEnumerable<T>)

Сцепляет элементы созданной коллекции, помещая между ними заданный разделитель.Concatenates the members of a collection, using the specified separator between each member.

LastIndexOf(Char) LastIndexOf(Char) LastIndexOf(Char) LastIndexOf(Char)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения указанного символа Юникода в пределах данного экземпляра.Reports the zero-based index position of the last occurrence of a specified Unicode character within this instance.

LastIndexOf(Char, Int32) LastIndexOf(Char, Int32) LastIndexOf(Char, Int32) LastIndexOf(Char, Int32)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения указанного символа Юникода в пределах данного экземпляра.Reports the zero-based index position of the last occurrence of a specified Unicode character within this instance. Поиск начинается с указанной позиции символа и выполняется в обратном направлении до начала строки.The search starts at a specified character position and proceeds backward toward the beginning of the string.

LastIndexOf(Char, Int32, Int32) LastIndexOf(Char, Int32, Int32) LastIndexOf(Char, Int32, Int32) LastIndexOf(Char, Int32, Int32)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения указанного символа Юникода в подстроке в пределах данного экземпляра.Reports the zero-based index position of the last occurrence of the specified Unicode character in a substring within this instance. Поиск начинается с указанной позиции символа и выполняется в обратном направлении до начала строки для заданного числа позиций символов.The search starts at a specified character position and proceeds backward toward the beginning of the string for a specified number of character positions.

LastIndexOf(String) LastIndexOf(String) LastIndexOf(String) LastIndexOf(String)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения указанной строки в данном экземпляре.Reports the zero-based index position of the last occurrence of a specified string within this instance.

LastIndexOf(String, Int32) LastIndexOf(String, Int32) LastIndexOf(String, Int32) LastIndexOf(String, Int32)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения указанной строки в данном экземпляре.Reports the zero-based index position of the last occurrence of a specified string within this instance. Поиск начинается с указанной позиции символа и выполняется в обратном направлении до начала строки.The search starts at a specified character position and proceeds backward toward the beginning of the string.

LastIndexOf(String, Int32, Int32) LastIndexOf(String, Int32, Int32) LastIndexOf(String, Int32, Int32) LastIndexOf(String, Int32, Int32)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения указанной строки в данном экземпляре.Reports the zero-based index position of the last occurrence of a specified string within this instance. Поиск начинается с указанной позиции символа и выполняется в обратном направлении до начала строки для заданного числа позиций символов.The search starts at a specified character position and proceeds backward toward the beginning of the string for a specified number of character positions.

LastIndexOf(String, Int32, Int32, StringComparison) LastIndexOf(String, Int32, Int32, StringComparison) LastIndexOf(String, Int32, Int32, StringComparison) LastIndexOf(String, Int32, Int32, StringComparison)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения указанной строки в данном экземпляре.Reports the zero-based index position of the last occurrence of a specified string within this instance. Поиск начинается с указанной позиции символа и выполняется в обратном направлении до начала строки для заданного числа позиций символов.The search starts at a specified character position and proceeds backward toward the beginning of the string for the specified number of character positions. Параметр определяет тип сравнения для выполнения во время поиска заданной строки.A parameter specifies the type of comparison to perform when searching for the specified string.

LastIndexOf(String, Int32, StringComparison) LastIndexOf(String, Int32, StringComparison) LastIndexOf(String, Int32, StringComparison) LastIndexOf(String, Int32, StringComparison)

Возвращает индекс с отсчетом от нуля последнего вхождения указанной строки в текущем объекте String.Reports the zero-based index of the last occurrence of a specified string within the current String object. Поиск начинается с указанной позиции символа и выполняется в обратном направлении до начала строки.The search starts at a specified character position and proceeds backward toward the beginning of the string. Параметр определяет тип сравнения для выполнения во время поиска заданной строки.A parameter specifies the type of comparison to perform when searching for the specified string.

LastIndexOf(String, StringComparison) LastIndexOf(String, StringComparison) LastIndexOf(String, StringComparison) LastIndexOf(String, StringComparison)

Возвращает индекс с отсчетом от нуля последнего вхождения указанной строки в текущем объекте String.Reports the zero-based index of the last occurrence of a specified string within the current String object. Параметр определяет тип поиска заданной строки.A parameter specifies the type of search to use for the specified string.

LastIndexOfAny(Char[]) LastIndexOfAny(Char[]) LastIndexOfAny(Char[]) LastIndexOfAny(Char[])

Возвращает позицию индекса с отсчетом от нуля последнего вхождения в данном экземпляре какого-либо одного или нескольких символов, указанных в массиве символов Юникода.Reports the zero-based index position of the last occurrence in this instance of one or more characters specified in a Unicode array.

LastIndexOfAny(Char[], Int32) LastIndexOfAny(Char[], Int32) LastIndexOfAny(Char[], Int32) LastIndexOfAny(Char[], Int32)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения в данном экземпляре какого-либо одного или нескольких символов, указанных в массиве символов Юникода.Reports the zero-based index position of the last occurrence in this instance of one or more characters specified in a Unicode array. Поиск начинается с указанной позиции символа и выполняется в обратном направлении до начала строки.The search starts at a specified character position and proceeds backward toward the beginning of the string.

LastIndexOfAny(Char[], Int32, Int32) LastIndexOfAny(Char[], Int32, Int32) LastIndexOfAny(Char[], Int32, Int32) LastIndexOfAny(Char[], Int32, Int32)

Возвращает позицию индекса с отсчетом от нуля последнего вхождения в данном экземпляре какого-либо одного или нескольких символов, указанных в массиве символов Юникода.Reports the zero-based index position of the last occurrence in this instance of one or more characters specified in a Unicode array. Поиск начинается с указанной позиции символа и выполняется в обратном направлении до начала строки для заданного числа позиций символов.The search starts at a specified character position and proceeds backward toward the beginning of the string for a specified number of character positions.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
Normalize() Normalize() Normalize() Normalize()

Возвращает новую строку, текстовое значение которой совпадает с данной строкой, а двоичное представление находится в нормализованной форме C Юникода.Returns a new string whose textual value is the same as this string, but whose binary representation is in Unicode normalization form C.

Normalize(NormalizationForm) Normalize(NormalizationForm) Normalize(NormalizationForm) Normalize(NormalizationForm)

Возвращает новую строку, текстовое значение которой совпадает с данной строкой, а двоичное представление находится в заданной нормализованной форме Юникода.Returns a new string whose textual value is the same as this string, but whose binary representation is in the specified Unicode normalization form.

PadLeft(Int32) PadLeft(Int32) PadLeft(Int32) PadLeft(Int32)

Возвращает новую строку, в которой знаки данного экземпляра выровнены по правому краю путем добавления слева символов-разделителей до указанной общей длины.Returns a new string that right-aligns the characters in this instance by padding them with spaces on the left, for a specified total length.

PadLeft(Int32, Char) PadLeft(Int32, Char) PadLeft(Int32, Char) PadLeft(Int32, Char)

Возвращает новую строку, в которой знаки данного экземпляра выровнены по правому краю путем добавления слева пробелов или указанного знака Юникода до указанной общей длины.Returns a new string that right-aligns the characters in this instance by padding them on the left with a specified Unicode character, for a specified total length.

PadRight(Int32) PadRight(Int32) PadRight(Int32) PadRight(Int32)

Возвращает новую строку, в которой знаки данной строки выровнены по левому краю путем добавления справа пробелов до указанной общей длины.Returns a new string that left-aligns the characters in this string by padding them with spaces on the right, for a specified total length.

PadRight(Int32, Char) PadRight(Int32, Char) PadRight(Int32, Char) PadRight(Int32, Char)

Возвращает новую строку, в которой знаки данной строки выровнены по левому краю путем добавления справа пробелов или указанного знака Юникода до указанной общей длины.Returns a new string that left-aligns the characters in this string by padding them on the right with a specified Unicode character, for a specified total length.

Remove(Int32) Remove(Int32) Remove(Int32) Remove(Int32)

Возвращает новую строку, в которой были удалены все символы, начиная с указанной позиции и до конца в текущем экземпляре.Returns a new string in which all the characters in the current instance, beginning at a specified position and continuing through the last position, have been deleted.

Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32)

Возвращает новую строку, в которой было удалено указанное число символов в указанной позиции.Returns a new string in which a specified number of characters in the current instance beginning at a specified position have been deleted.

Replace(Char, Char) Replace(Char, Char) Replace(Char, Char) Replace(Char, Char)

Возвращает новую строку, в которой все вхождения заданного знака Юникода в текущем экземпляре заменены другим заданным знаком Юникода.Returns a new string in which all occurrences of a specified Unicode character in this instance are replaced with another specified Unicode character.

Replace(String, String) Replace(String, String) Replace(String, String) Replace(String, String)

Возвращает новую строку, в которой все вхождения заданной строки в текущем экземпляре заменены другой заданной строкой.Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string.

Replace(String, String, Boolean, CultureInfo) Replace(String, String, Boolean, CultureInfo) Replace(String, String, Boolean, CultureInfo) Replace(String, String, Boolean, CultureInfo)
Replace(String, String, StringComparison) Replace(String, String, StringComparison) Replace(String, String, StringComparison) Replace(String, String, StringComparison)
Split(Char, Int32, StringSplitOptions) Split(Char, Int32, StringSplitOptions) Split(Char, Int32, StringSplitOptions) Split(Char, Int32, StringSplitOptions)
Split(Char, StringSplitOptions) Split(Char, StringSplitOptions) Split(Char, StringSplitOptions) Split(Char, StringSplitOptions)
Split(Char[]) Split(Char[]) Split(Char[]) Split(Char[])

Разбивает строку на подстроки в зависимости от символов в массиве.Splits a string into substrings that are based on the characters in an array.

Split(Char[], Int32) Split(Char[], Int32) Split(Char[], Int32) Split(Char[], Int32)

Разбивает строку на максимальное число подстрок в зависимости от символов в массиве.Splits a string into a maximum number of substrings based on the characters in an array. Можно также указать максимальное число возвращаемых подстрок.You also specify the maximum number of substrings to return.

Split(Char[], Int32, StringSplitOptions) Split(Char[], Int32, StringSplitOptions) Split(Char[], Int32, StringSplitOptions) Split(Char[], Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок в зависимости от символов в массиве.Splits a string into a maximum number of substrings based on the characters in an array.

Split(Char[], StringSplitOptions) Split(Char[], StringSplitOptions) Split(Char[], StringSplitOptions) Split(Char[], StringSplitOptions)

Разбивает строку на подстроки в зависимости от символов в массиве.Splits a string into substrings based on the characters in an array. Можно указать, включают ли подстроки пустые элементы массива.You can specify whether the substrings include empty array elements.

Split(String, Int32, StringSplitOptions) Split(String, Int32, StringSplitOptions) Split(String, Int32, StringSplitOptions) Split(String, Int32, StringSplitOptions)
Split(String, StringSplitOptions) Split(String, StringSplitOptions) Split(String, StringSplitOptions) Split(String, StringSplitOptions)
Split(String[], Int32, StringSplitOptions) Split(String[], Int32, StringSplitOptions) Split(String[], Int32, StringSplitOptions) Split(String[], Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок в зависимости от строк в массиве.Splits a string into a maximum number of substrings based on the strings in an array. Можно указать, включают ли подстроки пустые элементы массива.You can specify whether the substrings include empty array elements.

Split(String[], StringSplitOptions) Split(String[], StringSplitOptions) Split(String[], StringSplitOptions) Split(String[], StringSplitOptions)

Разбивает строку на подстроки в зависимости от строк в массиве.Splits a string into substrings based on the strings in an array. Можно указать, включают ли подстроки пустые элементы массива.You can specify whether the substrings include empty array elements.

StartsWith(Char) StartsWith(Char) StartsWith(Char) StartsWith(Char)
StartsWith(String) StartsWith(String) StartsWith(String) StartsWith(String)

Определяет, совпадает ли начало данного экземпляра строки с указанной строкой.Determines whether the beginning of this string instance matches the specified string.

StartsWith(String, Boolean, CultureInfo) StartsWith(String, Boolean, CultureInfo) StartsWith(String, Boolean, CultureInfo) StartsWith(String, Boolean, CultureInfo)

Определяет, совпадает ли начало экземпляра строки с заданной строкой при сравнении с учетом заданного языка и региональных параметров.Determines whether the beginning of this string instance matches the specified string when compared using the specified culture.

StartsWith(String, StringComparison) StartsWith(String, StringComparison) StartsWith(String, StringComparison) StartsWith(String, StringComparison)

Определяет, совпадает ли начало этого экземпляра строки с заданной строкой при сравнении с учетом заданного параметра сравнения.Determines whether the beginning of this string instance matches the specified string when compared using the specified comparison option.

Substring(Index) Substring(Index) Substring(Index) Substring(Index)
Substring(Int32) Substring(Int32) Substring(Int32) Substring(Int32)

Извлекает подстроку из данного экземпляра.Retrieves a substring from this instance. Подстрока начинается в указанном положении символов и продолжается до конца строки.The substring starts at a specified character position and continues to the end of the string.

Substring(Int32, Int32) Substring(Int32, Int32) Substring(Int32, Int32) Substring(Int32, Int32)

Извлекает подстроку из данного экземпляра.Retrieves a substring from this instance. Подстрока начинается с указанной позиции знака и имеет указанную длину.The substring starts at a specified character position and has a specified length.

Substring(Range) Substring(Range) Substring(Range) Substring(Range)
ToCharArray() ToCharArray() ToCharArray() ToCharArray()

Копирует знаки данного экземпляра в массив знаков Юникода.Copies the characters in this instance to a Unicode character array.

ToCharArray(Int32, Int32) ToCharArray(Int32, Int32) ToCharArray(Int32, Int32) ToCharArray(Int32, Int32)

Копирует знаки из указанной подстроки данного экземпляра в массив знаков Юникода.Copies the characters in a specified substring in this instance to a Unicode character array.

ToLower() ToLower() ToLower() ToLower()

Возвращает копию этой строки, переведенную в нижний регистр.Returns a copy of this string converted to lowercase.

ToLower(CultureInfo) ToLower(CultureInfo) ToLower(CultureInfo) ToLower(CultureInfo)

Возвращает копию этой строки, переведенную в нижний регистр, используя правила определения регистра заданного языка и региональных параметров.Returns a copy of this string converted to lowercase, using the casing rules of the specified culture.

ToLowerInvariant() ToLowerInvariant() ToLowerInvariant() ToLowerInvariant()

Возвращает копию этого объекта String, переведенную в нижний регистр, используя правила учета регистра инвариантного языка и региональных параметров.Returns a copy of this String object converted to lowercase using the casing rules of the invariant culture.

ToString() ToString() ToString() ToString()

Возвращает этот экземпляр String; реальное преобразование не осуществляется.Returns this instance of String; no actual conversion is performed.

ToString(IFormatProvider) ToString(IFormatProvider) ToString(IFormatProvider) ToString(IFormatProvider)

Возвращает этот экземпляр String; реальное преобразование не осуществляется.Returns this instance of String; no actual conversion is performed.

ToUpper() ToUpper() ToUpper() ToUpper()

Возвращает копию этой строки, переведенную в верхний регистр.Returns a copy of this string converted to uppercase.

ToUpper(CultureInfo) ToUpper(CultureInfo) ToUpper(CultureInfo) ToUpper(CultureInfo)

Возвращает копию этой строки, переведенную в верхний регистр, используя правила определения регистра заданного языка и региональных параметров.Returns a copy of this string converted to uppercase, using the casing rules of the specified culture.

ToUpperInvariant() ToUpperInvariant() ToUpperInvariant() ToUpperInvariant()

Возвращает копию этого объекта String, переведенную в верхний регистр, используя правила учета регистра инвариантного языка и региональных параметров.Returns a copy of this String object converted to uppercase using the casing rules of the invariant culture.

Trim() Trim() Trim() Trim()

Удаляет все начальные и конечные символы-разделители из текущего объекта String.Removes all leading and trailing white-space characters from the current String object.

Trim(Char) Trim(Char) Trim(Char) Trim(Char)
Trim(Char[]) Trim(Char[]) Trim(Char[]) Trim(Char[])

Удаляет все начальные и конечные вхождения набора знаков, заданного в виде массива, из текущего объекта String.Removes all leading and trailing occurrences of a set of characters specified in an array from the current String object.

TrimEnd() TrimEnd() TrimEnd() TrimEnd()
TrimEnd(Char) TrimEnd(Char) TrimEnd(Char) TrimEnd(Char)
TrimEnd(Char[]) TrimEnd(Char[]) TrimEnd(Char[]) TrimEnd(Char[])

Удаляет все конечные вхождения набора знаков, заданного в виде массива, из текущего объекта String.Removes all trailing occurrences of a set of characters specified in an array from the current String object.

TrimStart() TrimStart() TrimStart() TrimStart()
TrimStart(Char) TrimStart(Char) TrimStart(Char) TrimStart(Char)
TrimStart(Char[]) TrimStart(Char[]) TrimStart(Char[]) TrimStart(Char[])

Удаляет все начальные вхождения набора знаков, заданного в виде массива, из текущего объекта String.Removes all leading occurrences of a set of characters specified in an array from the current String object.

Операторы

Equality(String, String) Equality(String, String) Equality(String, String) Equality(String, String)

Определяет, равны ли значения двух указанных строк.Determines whether two specified strings have the same value.

Implicit(String to ReadOnlySpan<Char>) Implicit(String to ReadOnlySpan<Char>) Implicit(String to ReadOnlySpan<Char>) Implicit(String to ReadOnlySpan<Char>)
Inequality(String, String) Inequality(String, String) Inequality(String, String) Inequality(String, String)

Определяет, различаются ли значения двух указанных строк.Determines whether two specified strings have different values.

Явные реализации интерфейса

IComparable.CompareTo(Object) IComparable.CompareTo(Object) IComparable.CompareTo(Object) IComparable.CompareTo(Object)
IConvertible.GetTypeCode() IConvertible.GetTypeCode() IConvertible.GetTypeCode() IConvertible.GetTypeCode()
IConvertible.ToBoolean(IFormatProvider) IConvertible.ToBoolean(IFormatProvider) IConvertible.ToBoolean(IFormatProvider) IConvertible.ToBoolean(IFormatProvider)

Описание этого члена см. в разделе ToBoolean(IFormatProvider).For a description of this member, see ToBoolean(IFormatProvider).

IConvertible.ToByte(IFormatProvider) IConvertible.ToByte(IFormatProvider) IConvertible.ToByte(IFormatProvider) IConvertible.ToByte(IFormatProvider)

Описание этого члена см. в разделе ToByte(IFormatProvider).For a description of this member, see ToByte(IFormatProvider).

IConvertible.ToChar(IFormatProvider) IConvertible.ToChar(IFormatProvider) IConvertible.ToChar(IFormatProvider) IConvertible.ToChar(IFormatProvider)

Описание этого члена см. в разделе ToChar(IFormatProvider).For a description of this member, see ToChar(IFormatProvider).

IConvertible.ToDateTime(IFormatProvider) IConvertible.ToDateTime(IFormatProvider) IConvertible.ToDateTime(IFormatProvider) IConvertible.ToDateTime(IFormatProvider)

Описание этого члена см. в разделе ToDateTime(IFormatProvider).For a description of this member, see ToDateTime(IFormatProvider).

IConvertible.ToDecimal(IFormatProvider) IConvertible.ToDecimal(IFormatProvider) IConvertible.ToDecimal(IFormatProvider) IConvertible.ToDecimal(IFormatProvider)

Описание этого члена см. в разделе ToDecimal(IFormatProvider).For a description of this member, see ToDecimal(IFormatProvider).

IConvertible.ToDouble(IFormatProvider) IConvertible.ToDouble(IFormatProvider) IConvertible.ToDouble(IFormatProvider) IConvertible.ToDouble(IFormatProvider)

Описание этого члена см. в разделе ToDouble(IFormatProvider).For a description of this member, see ToDouble(IFormatProvider).

IConvertible.ToInt16(IFormatProvider) IConvertible.ToInt16(IFormatProvider) IConvertible.ToInt16(IFormatProvider) IConvertible.ToInt16(IFormatProvider)

Описание этого члена см. в разделе ToInt16(IFormatProvider).For a description of this member, see ToInt16(IFormatProvider).

IConvertible.ToInt32(IFormatProvider) IConvertible.ToInt32(IFormatProvider) IConvertible.ToInt32(IFormatProvider) IConvertible.ToInt32(IFormatProvider)

Описание этого члена см. в разделе ToInt32(IFormatProvider).For a description of this member, see ToInt32(IFormatProvider).

IConvertible.ToInt64(IFormatProvider) IConvertible.ToInt64(IFormatProvider) IConvertible.ToInt64(IFormatProvider) IConvertible.ToInt64(IFormatProvider)

Описание этого члена см. в разделе ToInt64(IFormatProvider).For a description of this member, see ToInt64(IFormatProvider).

IConvertible.ToSByte(IFormatProvider) IConvertible.ToSByte(IFormatProvider) IConvertible.ToSByte(IFormatProvider) IConvertible.ToSByte(IFormatProvider)

Описание этого члена см. в разделе ToSByte(IFormatProvider).For a description of this member, see ToSByte(IFormatProvider).

IConvertible.ToSingle(IFormatProvider) IConvertible.ToSingle(IFormatProvider) IConvertible.ToSingle(IFormatProvider) IConvertible.ToSingle(IFormatProvider)

Описание этого члена см. в разделе ToSingle(IFormatProvider).For a description of this member, see ToSingle(IFormatProvider).

IConvertible.ToString(IFormatProvider) IConvertible.ToString(IFormatProvider) IConvertible.ToString(IFormatProvider) IConvertible.ToString(IFormatProvider)
IConvertible.ToType(Type, IFormatProvider) IConvertible.ToType(Type, IFormatProvider) IConvertible.ToType(Type, IFormatProvider) IConvertible.ToType(Type, IFormatProvider)

Описание этого члена см. в разделе ToType(Type, IFormatProvider).For a description of this member, see ToType(Type, IFormatProvider).

IConvertible.ToUInt16(IFormatProvider) IConvertible.ToUInt16(IFormatProvider) IConvertible.ToUInt16(IFormatProvider) IConvertible.ToUInt16(IFormatProvider)

Описание этого члена см. в разделе ToUInt16(IFormatProvider).For a description of this member, see ToUInt16(IFormatProvider).

IConvertible.ToUInt32(IFormatProvider) IConvertible.ToUInt32(IFormatProvider) IConvertible.ToUInt32(IFormatProvider) IConvertible.ToUInt32(IFormatProvider)

Описание этого члена см. в разделе ToUInt32(IFormatProvider).For a description of this member, see ToUInt32(IFormatProvider).

IConvertible.ToUInt64(IFormatProvider) IConvertible.ToUInt64(IFormatProvider) IConvertible.ToUInt64(IFormatProvider) IConvertible.ToUInt64(IFormatProvider)

Описание этого члена см. в разделе ToUInt64(IFormatProvider).For a description of this member, see ToUInt64(IFormatProvider).

IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator()

Возвращает перечислитель, выполняющий перебор элементов текущего объекта String.Returns an enumerator that iterates through the current String object.

IEnumerable<Char>.GetEnumerator() IEnumerable<Char>.GetEnumerator() IEnumerable<Char>.GetEnumerator() IEnumerable<Char>.GetEnumerator()

Возвращает перечислитель, выполняющий перебор элементов текущего объекта String.Returns an enumerator that iterates through the current String object.

Extension Methods

CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>)

Возвращает объект DataTable, содержащий копии объектов DataRow при заданном входном объекте IEnumerable<T> и универсальном параметре T, равном DataRow.Returns a DataTable that contains copies of the DataRow objects, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption)

Копирует объекты DataRow в указанный объект DataTable с заданным входным объектом IEnumerable<T>, где универсальный параметр T имеет значение DataRow.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler)

Копирует объекты DataRow в указанный объект DataTable с заданным входным объектом IEnumerable<T>, где универсальный параметр T имеет значение DataRow.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable)

Приводит элементы IEnumerable к указанному типу.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов IEnumerable на основе указанного типа.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.Enables parallelization of a query.

AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable)

Преобразует IEnumerable для IQueryable.Converts an IEnumerable to an IQueryable.

AsMemory(String) AsMemory(String) AsMemory(String) AsMemory(String)
AsMemory(String, Int32) AsMemory(String, Int32) AsMemory(String, Int32) AsMemory(String, Int32)
AsMemory(String, Int32, Int32) AsMemory(String, Int32, Int32) AsMemory(String, Int32, Int32) AsMemory(String, Int32, Int32)
AsSpan(String) AsSpan(String) AsSpan(String) AsSpan(String)
AsSpan(String, Int32) AsSpan(String, Int32) AsSpan(String, Int32) AsSpan(String, Int32)
AsSpan(String, Int32, Int32) AsSpan(String, Int32, Int32) AsSpan(String, Int32, Int32) AsSpan(String, Int32, Int32)
IsNormalized(String) IsNormalized(String) IsNormalized(String) IsNormalized(String)

Указывает, находится ли данная строка в заданной форме нормализации Юникода C.Indicates whether the specified string is in Unicode normalization form C.

IsNormalized(String, NormalizationForm) IsNormalized(String, NormalizationForm) IsNormalized(String, NormalizationForm) IsNormalized(String, NormalizationForm)

Указывает, находится ли строка в заданной форме нормализации Юникода.Indicates whether a string is in a specified Unicode normalization form.

Normalize(String) Normalize(String) Normalize(String) Normalize(String)

Нормализует строку в заданную нормализованную форму Юникода C.Normalizes a string to a Unicode normalization form C.

Normalize(String, NormalizationForm) Normalize(String, NormalizationForm) Normalize(String, NormalizationForm) Normalize(String, NormalizationForm)

Нормализует строку в заданную нормализованную форму Юникода.Normalizes a string to the specified Unicode normalization form.

Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>)

Возвращает коллекцию элементов, содержащую предков каждого узла в исходной коллекции.Returns a collection of elements that contains the ancestors of every node in the source collection.

Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию элементов, содержащую предков каждого узла в исходной коллекции.Returns a filtered collection of elements that contains the ancestors of every node in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>)

Возвращает коллекцию подчиненных узлов каждого документа и элемента в исходной коллекции.Returns a collection of the descendant nodes of every document and element in the source collection.

Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>)

Возвращает коллекцию элементов, содержащую подчиненные элементы каждого элемента и документа в исходной коллекции.Returns a collection of elements that contains the descendant elements of every element and document in the source collection.

Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию элементов, содержащую подчиненные элементы каждого элемента и документа в исходной коллекции.Returns a filtered collection of elements that contains the descendant elements of every element and document in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>)

Возвращает коллекцию дочерних элементов каждого элемента и документа в исходной коллекции.Returns a collection of the child elements of every element and document in the source collection.

Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию дочерних элементов каждого элемента и документа в исходной коллекции.Returns a filtered collection of the child elements of every element and document in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>)

Возвращает коллекцию узлов, содержащую все узлы в исходной коллекции, отсортированные в порядке следования документов.Returns a collection of nodes that contains all nodes in the source collection, sorted in document order.

Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>)

Возвращает коллекцию дочерних узлов каждого документа и элемента в исходной коллекции.Returns a collection of the child nodes of every document and element in the source collection.

Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>)

Удаление каждого узла в исходной коллекции из родительского узла.Removes every node in the source collection from its parent node.

Применяется к

Потокобезопасность

Данный тип потокобезопасен.This type is thread safe.

Дополнительно