String Classe

Definição

Representa o texto como uma sequência de unidades de código UTF-16.

public ref class System::String sealed : IComparable, IComparable<System::String ^>, IConvertible, IEquatable<System::String ^>, System::Collections::Generic::IEnumerable<char>
public ref class System::String sealed : ICloneable, IComparable, IComparable<System::String ^>, IConvertible, IEquatable<System::String ^>, IParsable<System::String ^>, ISpanParsable<System::String ^>, System::Collections::Generic::IEnumerable<char>
public ref class System::String sealed : ICloneable, IComparable, IComparable<System::String ^>, IConvertible, IEquatable<System::String ^>, System::Collections::Generic::IEnumerable<char>
public ref class System::String sealed : ICloneable, IComparable, IConvertible, System::Collections::IEnumerable
public ref class System::String sealed : IComparable, IComparable<System::String ^>, IEquatable<System::String ^>, System::Collections::IEnumerable
public ref class System::String sealed : IComparable, IComparable<System::String ^>, IEquatable<System::String ^>, System::Collections::Generic::IEnumerable<char>
public sealed class String : IComparable, IComparable<string>, IConvertible, IEquatable<string>, System.Collections.Generic.IEnumerable<char>
public sealed class String : ICloneable, IComparable, IComparable<string>, IConvertible, IEquatable<string>, IParsable<string>, ISpanParsable<string>, System.Collections.Generic.IEnumerable<char>
public sealed class String : ICloneable, IComparable, IComparable<string>, IConvertible, IEquatable<string>, System.Collections.Generic.IEnumerable<char>
[System.Serializable]
public sealed class String : ICloneable, IComparable, IConvertible, System.Collections.IEnumerable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class String : ICloneable, IComparable, IComparable<string>, IConvertible, IEquatable<string>, System.Collections.Generic.IEnumerable<char>
public sealed class String : IComparable, IComparable<string>, IEquatable<string>, System.Collections.IEnumerable
public sealed class String : IComparable, IComparable<string>, IEquatable<string>, System.Collections.Generic.IEnumerable<char>
type string = class
    interface seq<char>
    interface IEnumerable
    interface IComparable
    interface IComparable<string>
    interface IConvertible
    interface IEquatable<string>
type string = class
    interface seq<char>
    interface IEnumerable
    interface ICloneable
    interface IComparable
    interface IComparable<string>
    interface IConvertible
    interface IEquatable<string>
    interface IParsable<string>
    interface ISpanParsable<string>
type string = class
    interface seq<char>
    interface IEnumerable
    interface ICloneable
    interface IComparable
    interface IComparable<string>
    interface IConvertible
    interface IEquatable<string>
type string = class
    interface seq<char>
    interface IEnumerable
    interface IComparable
    interface IComparable<string>
    interface IConvertible
    interface IEquatable<string>
    interface ICloneable
[<System.Serializable>]
type string = class
    interface IComparable
    interface ICloneable
    interface IConvertible
    interface IEnumerable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type string = class
    interface IComparable
    interface ICloneable
    interface IConvertible
    interface IComparable<string>
    interface seq<char>
    interface IEnumerable
    interface IEquatable<string>
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type string = class
    interface IComparable
    interface ICloneable
    interface IConvertible
    interface IEnumerable
    interface IComparable<string>
    interface seq<char>
    interface IEquatable<string>
type string = class
    interface IEnumerable
    interface IComparable
    interface IComparable<string>
    interface IEquatable<string>
type string = class
    interface IComparable
    interface IComparable<string>
    interface IEquatable<string>
    interface seq<char>
    interface IEnumerable
Public NotInheritable Class String
Implements IComparable, IComparable(Of String), IConvertible, IEnumerable(Of Char), IEquatable(Of String)
Public NotInheritable Class String
Implements ICloneable, IComparable, IComparable(Of String), IConvertible, IEnumerable(Of Char), IEquatable(Of String), IParsable(Of String), ISpanParsable(Of String)
Public NotInheritable Class String
Implements ICloneable, IComparable, IComparable(Of String), IConvertible, IEnumerable(Of Char), IEquatable(Of String)
Public NotInheritable Class String
Implements ICloneable, IComparable, IConvertible, IEnumerable
Public NotInheritable Class String
Implements IComparable, IComparable(Of String), IEnumerable, IEquatable(Of String)
Public NotInheritable Class String
Implements IComparable, IComparable(Of String), IEnumerable(Of Char), IEquatable(Of String)
Herança
String
Atributos
Implementações

Observações

Uma cadeia de caracteres é uma coleção sequencial de caracteres usada para representar texto. Um String objeto é uma coleção sequencial de objetos que representam uma cadeia de caracteres, um System.Char objeto corresponde a uma unidade de System.Char código UTF-16. O valor do String objeto é o conteúdo da coleção sequencial de System.Char objetos, e esse valor é imutável (ou seja, é somente leitura). Para obter mais informações sobre a imutabilidade de cadeias de caracteres, consulte a seção Immutabilidade e a classe StringBuilder. O tamanho máximo de um String objeto na memória é de 2 GB, ou cerca de 1 bilhão de caracteres.

Para obter mais informações sobre Unicode, UTF-16, unidades de código, pontos de código e os tipos Char e Rune, consulte Introdução à codificação de caracteres no .NET.

Instanciar um objeto String

Você pode instanciar um String objeto das seguintes maneiras:

  • Atribuindo um literal de cadeia de caracteres a uma String variável. Este é o método mais comumente usado para criar uma cadeia de caracteres. O exemplo a seguir usa atribuição para criar várias cadeias de caracteres. Note que no C# e F#, como a barra invertida (\) é um caractere de escape, as barras invertidas literais numa string devem ser escapadas ou toda a string deve ser prefixada com @.

    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
    
    let string1 = "This is a string created by assignment."
    printfn "%s" string1
    let string2a = "The path is C:\\PublicDocuments\\Report1.doc"
    printfn "%s" string2a
    let string2b = @"The path is C:\PublicDocuments\Report1.doc"
    printfn "%s" 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
    
  • Chamando um construtor da classe String. O exemplo a seguir instancia cadeias de caracteres chamando vários construtores de classe. Observe que alguns dos construtores incluem ponteiros para matrizes de caracteres ou matrizes de bytes assinados como parâmetros. Visual Basic não oferece suporte a chamadas para esses construtores. Para obter informações detalhadas sobre String construtores, consulte a visão geral dos String construtores.

    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
    
    let chars = [| 'w'; 'o'; 'r'; 'd' |]
    let bytes = [| 0x41y; 0x42y; 0x43y; 0x44y; 0x45y; 0x00y |]
    
    // Create a string from a character array.
    let string1 = String chars
    printfn "%s" string1
    
    // Create a string that consists of a character repeated 20 times.
    let string2 = String('c', 20)
    printfn "%s" string2
    
    let stringFromBytes =
        // Create a string from a pointer to a signed byte array.
        use pbytes = fixed bytes
        String pbytes
    let stringFromChars = 
        // Create a string from a pointer to a character array.
        use pchars = fixed chars
        String pchars
    
    printfn $"{stringFromBytes}"
    printfn $"{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
    
  • Usando o operador de concatenação de cadeia de caracteres (+ em C# e F#, e & ou + em Visual Basic) para criar uma única cadeia de caracteres a partir de qualquer combinação de instâncias de String e literais de cadeia de caracteres. O exemplo a seguir ilustra o uso do operador de concatenação de cadeia de caracteres.

    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.
    
    let string1 = "Today is " + DateTime.Now.ToString("D") + "."
    printfn $"{string1}"
    
    let string2 = "This is one sentence. " + "This is a second. "
    let string2 = string2 + "This is a third sentence."
    printfn $"{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.
    
  • Recuperando uma propriedade ou chamando um método que retorna uma cadeia de caracteres. O exemplo a seguir usa os métodos da String classe para extrair uma substring de uma cadeia de caracteres maior.

    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
    
    let sentence = "This sentence has five words."
    // Extract the second word.
    let startPosition = sentence.IndexOf " " + 1
    let word2 = 
        sentence.Substring(startPosition, sentence.IndexOf(" ", startPosition) - startPosition)
    printfn $"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
    
  • Chamando um método de formatação para converter um valor ou objeto em sua representação de cadeia de caracteres. O exemplo a seguir usa a formatação composta para incorporar a representação em string de dois objetos numa string.

    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.
    
    let dateAndTime = DateTime(2011, 7, 6, 7, 32, 0)
    let temperature = 68.3
    String.Format("At {0:t} on {0:D}, the temperature was {1:F1} degrees Fahrenheit.", dateAndTime, temperature)
    |> printfn "%s"
    // 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.
    

Objetos Char e caracteres Unicode

Cada caractere em uma cadeia de caracteres é definido por um valor escalar Unicode, também chamado de ponto de código Unicode ou o valor ordinal (numérico) do caractere Unicode. Cada ponto de código é codificado usando a codificação UTF-16, e o valor numérico de cada elemento da codificação é representado por um Char objeto.

Note

Observe que, como uma String instância consiste em uma coleção sequencial de unidades de código UTF-16, é possível criar um String objeto que não seja uma cadeia de caracteres Unicode bem formada. Por exemplo, é possível criar uma string que tenha um substituto baixo sem um substituto alto correspondente. Embora alguns métodos, como os métodos de codificação e decodificação de objetos no namespace, possam executar verificações para garantir que as cadeias de caracteres estejam bem formadas, System.Text os String membros da classe não garantem que uma cadeia de caracteres esteja bem formada.

Um único Char objeto geralmente representa um único ponto de código, ou seja, o valor numérico do Char é igual ao ponto de código. Por exemplo, o ponto de código para o caractere "a" é U+0061. No entanto, um ponto de código pode exigir mais de um elemento codificado (mais de um Char objeto). O padrão Unicode define dois tipos de caracteres que correspondem a vários Char objetos: grafemas e pontos de código suplementar Unicode que correspondem a caracteres nos planos suplementares Unicode.

  • Um grafema é representado por um caractere base seguido por um ou mais caracteres combinados. Por exemplo, o caractere ä é representado por um Char objeto cujo ponto de código é U+0061 seguido por um Char objeto cujo ponto de código é U+0308. Esse caractere também pode ser definido por um único Char objeto que tenha um ponto de código U+00E4. Como mostra o exemplo a seguir, uma comparação sensível à cultura para a igualdade indica que essas duas representações são iguais, embora uma comparação ordinal comum não o faça. No entanto, se as duas cadeias de caracteres são normalizadas, uma comparação ordinal também indica que elas são iguais. (Para obter mais informações sobre como normalizar cadeias de caracteres, consulte o Seção de normalização .)

    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
    
    open System
    open System.IO
    
    do
        use sw = new StreamWriter(@".\graphemes.txt")
        let grapheme = "\u0061\u0308"
        sw.WriteLine grapheme
    
        let 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))
    // The example produces the following output:
    //       ä
    //       ä
    //       ä = ä (Culture-sensitive): True
    //       ä = ä (Ordinal): False
    //       ä = ä (Normalized Ordinal): True
    
    Imports System.Globalization
    Imports System.IO
    
    Module Example9
        Public Sub Main()
            Dim sw As New StreamWriter(".\graphemes.txt")
            Dim grapheme As String = ChrW(&H61) + ChrW(&H308)
            sw.WriteLine(grapheme)
    
            Dim singleChar As String = ChrW(&HE4)
            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
    
  • Um ponto de código suplementar Unicode (um par substituto) é representado por um Char objeto cujo ponto de código é um substituto alto seguido por um Char objeto cujo ponto de código é um substituto baixo. As unidades de código de altos substitutos variam de U+D800 a U+DBFF. As unidades de código de substitutos baixos variam de U+DC00 a U+DFFF. Os pares substitutos são usados para representar caracteres nos 16 planos suplementares Unicode. O exemplo a seguir cria um caractere substituto e o passa para o método para determinar se é um par substituto Char.IsSurrogatePair(Char, Char) .

    string surrogate = "\uD800\uDC03";
    for (int ctr = 0; ctr < surrogate.Length; ctr++) 
       Console.Write($"U+{(ushort)surrogate[ctr]:X2} ");
    
    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
    
    open System
    
    let surrogate = "\uD800\uDC03"
    for i = 0 to surrogate.Length - 1 do
        printf $"U+{uint16 surrogate[i]:X2} "
    
    printfn $"\n   Is Surrogate Pair: {Char.IsSurrogatePair(surrogate[0], surrogate[1])}"
    // The example displays the following output:
    //       U+D800 U+DC03
    //          Is Surrogate Pair: True
    
    Module Example20
        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
    

O padrão Unicode

Os caracteres em uma cadeia de caracteres são representados por unidades de código codificadas UTF-16, que correspondem a Char valores.

Cada caractere em uma cadeia de caracteres tem uma categoria de caractere Unicode associada, que é representada no .NET pela UnicodeCategory enumeração. A categoria de um caractere ou de um par substituto pode ser determinada chamando o CharUnicodeInfo.GetUnicodeCategory método.

O .NET mantém sua própria tabela de caracteres e suas categorias correspondentes, o que garante que uma versão específica de uma implementação do .NET em execução em plataformas diferentes retorne informações de categoria de caracteres idênticas. Em todas as versões do .NET e em todas as plataformas do sistema operacional, as informações de categoria de caracteres são fornecidas pelo Banco de Dados de Caracteres Unicode.

A tabela a seguir lista as versões do .NET e as versões do Unicode Standard nas quais suas categorias de caracteres são baseadas.

Versão .NET Versão do padrão Unicode
Framework .NET 1.1 O padrão Unicode, versão 4.0.0
.NET Framework 2.0 O padrão Unicode, versão 5.0.0
.NET Framework 3.5 O padrão Unicode, versão 5.0.0
.NET Framework 4 O padrão Unicode, versão 5.0.0
.NET Framework 4.5 O padrão Unicode, versão 6.3.0
.NET Framework 4.5.1 O padrão Unicode, versão 6.3.0
.NET Framework 4.5.2 O padrão Unicode, versão 6.3.0
.NET Framework 4.6 O padrão Unicode, versão 6.3.0
.NET Framework 4.6.1 O padrão Unicode, versão 6.3.0
.NET Framework 4.6.2 e versões posteriores O padrão Unicode, versão 8.0.0
.NET Core 2.1 O padrão Unicode, versão 8.0.0
.NET Core 3.1 O padrão Unicode, versão 11.0.0
.NET 5 O padrão Unicode, versão 13.0.0

Além disso, o .NET oferece suporte à comparação e classificação de cadeias de caracteres com base no padrão Unicode. A informação de comparação e ordenação de strings é fornecida pelas bibliotecas International Components for Unicode (exceto em versões Windows anteriores à atualização de maio de Windows 10 de 2019).

Caracteres nulos incorporados

No .NET, um String objeto pode incluir caracteres nulos incorporados, que contam como parte do comprimento da cadeia de caracteres. No entanto, em algumas linguagens como C e C++, um caractere nulo indica o final de uma cadeia de caracteres; não é considerado uma parte da cadeia de caracteres e não é contado como parte do comprimento da corda. Isso significa que as seguintes suposições comuns que programadores ou bibliotecas C e C++ escritas em C ou C++ podem fazer sobre cadeias de caracteres não são necessariamente válidas quando aplicadas a String objetos:

  • O valor retornado pelas strlen funções ou wcslen não é necessariamente igual a String.Length.

  • A cadeia de caracteres criada pelas strcpy_s funções ou wcscpy_s não é necessariamente idêntica à cadeia de caracteres que está sendo copiada.

Você deve garantir que o código C e C++ nativo que instancia String objetos e o código que recebe objetos String através da invocação da plataforma, não assuma que um caractere nulo embutido marca o final da cadeia de caracteres.

Os caracteres nulos incorporados em uma cadeia de caracteres também são tratados de forma diferente quando uma cadeia de caracteres é classificada (ou comparada) e quando uma cadeia de caracteres é pesquisada. Caracteres nulos são ignorados ao executar comparações sensíveis à cultura entre duas cadeias de caracteres, incluindo comparações usando a cultura invariante. Eles são considerados apenas para comparações ordinais ou para comparações ordinais sem distinção entre maiúsculas e minúsculas. Por outro lado, caracteres nulos incorporados são sempre considerados ao pesquisar uma cadeia de caracteres com métodos como Contains, StartsWithe IndexOf.

Strings e índices

Um índice é a posição de um Char objeto (não um carácter Unicode) em um String. Um índice é um número não negativo baseado em zero que começa a partir da primeira posição na cadeia de caracteres, que é a posição zero do índice. Vários métodos de pesquisa, como IndexOf e LastIndexOf, retornam o índice de um caractere ou substring na instância da cadeia de caracteres.

A Chars[Int32] propriedade permite acessar objetos individuais Char por sua posição de índice na cadeia de caracteres. Como a Chars[Int32] propriedade é a propriedade padrão (no Visual Basic) ou o indexador (em C# e F#), você pode acessar os objetos individuais Char em uma cadeia de caracteres usando um código como o seguinte. Esse código procura espaço em branco ou caracteres de pontuação em uma cadeia de caracteres para determinar quantas palavras a cadeia de caracteres contém.

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.
let s1 = "This string consists of a single short sentence."
let mutable nWords = 0

for i = 0 to s1.Length - 1 do
    if Char.IsPunctuation s1[i] || Char.IsWhiteSpace s1[i] then
        nWords <- nWords + 1
printfn $"The sentence\n   {s1}\nhas {nWords} words."
// The example displays the following output:
//       The sentence
//          This string consists of a single short sentence.
//       has 8 words.
Module Example12
    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)) 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.

Como a String classe implementa a IEnumerable interface, pode-se também iterar através dos Char objetos em uma cadeia de caracteres usando uma foreach estrutura, como mostra o exemplo a seguir.

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.
let s1 = "This string consists of a single short sentence."
let mutable nWords = 0

for ch in s1 do
    if Char.IsPunctuation ch || Char.IsWhiteSpace ch then
        nWords <- nWords + 1
printfn $"The sentence\n   {s1}\nhas {nWords} words."
// The example displays the following output:
//       The sentence
//          This string consists of a single short sentence.
//       has 8 words.
Module Example13
    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.

Valores de índice consecutivos podem não corresponder a caracteres Unicode consecutivos, porque um caractere Unicode pode ser codificado como mais de um Char objeto. Em particular, uma cadeia de caracteres pode conter unidades de texto de vários caracteres que são formadas por um caractere base seguido por um ou mais caracteres combinados ou por pares substitutos. Para trabalhar com caracteres Unicode em vez de objetos Char, use as classes System.Globalization.StringInfo e TextElementEnumerator ou os métodos String.EnumerateRunes e a estrutura Rune. O exemplo a seguir ilustra a diferença entre código que funciona com Char objetos e código que funciona com caracteres Unicode. Ele compara o número de caracteres ou elementos de texto em cada palavra de uma frase. A cadeia de caracteres inclui duas sequências de um caractere base seguido por um caractere combinado.

// 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
open System
open System.Globalization

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

for ch in opening do
    // Skip the ' character.
    if ch <> '\u0027' then
        if Char.IsWhiteSpace ch || Char.IsPunctuation ch then
            chars.Add nChars
            nChars <- 0
        else
            nChars <- nChars + 1

let te = StringInfo.GetTextElementEnumerator opening
while te.MoveNext() do
    let s = te.GetTextElement()
    // Skip the ' character.
    if s <> "\u0027" then
        if String.IsNullOrEmpty(s.Trim()) || (s.Length = 1 && Char.IsPunctuation(Convert.ToChar s)) then
            elements.Add nChars
            nChars <- 0
        else
            nChars <- nChars + 1

// Display character counts.
printfn "%6s %20s %20s" "Word #" "Char Objects " "Characters"
for i = 0 to chars.Count - 1 do
    printfn "%6d %20d %20d" i chars[i] elements[i]
// 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 Example14
    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(&H27) 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(&H27) Then Continue Do
            If String.IsNullOrEmpty(s.Trim()) Or (s.Length = 1 AndAlso Char.IsPunctuation(Convert.ToChar(s))) Then
                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

Este exemplo trabalha com elementos de texto usando o StringInfo.GetTextElementEnumerator método e a TextElementEnumerator classe para enumerar todos os elementos de texto em uma cadeia de caracteres. Você também pode recuperar uma matriz que contém o índice inicial de cada elemento de texto chamando o StringInfo.ParseCombiningCharacters método.

Para obter mais informações sobre como trabalhar com unidades de texto em vez de valores individuaisChar, consulte Introdução à codificação de caracteres no .NET.

Cadeias de caracteres nulas e cadeias de caracteres vazias

Uma cadeia de caracteres que foi declarada, mas não recebeu um valor é null. A tentativa de chamar métodos nessa cadeia de caracteres lança um NullReferenceException. Uma cadeia de caracteres nula é diferente de uma cadeia de caracteres vazia, que é uma cadeia de caracteres cujo valor é "" ou String.Empty. Em alguns casos, passar uma cadeia de caracteres nula ou uma cadeia de caracteres vazia como um argumento em uma chamada de método lança uma exceção. Por exemplo, passar uma cadeia de caracteres nula para o Int32.Parse método lança um ArgumentNullException, e passar uma cadeia de caracteres vazia lança um FormatException. Em outros casos, um argumento de método pode ser uma cadeia de caracteres nula ou uma cadeia de caracteres vazia. Por exemplo, se você estiver fornecendo uma IFormattable implementação para uma classe, você deseja equiparar uma cadeia de caracteres nula e uma cadeia de caracteres vazia com o especificador de formato geral ("G").

A String classe inclui os dois métodos de conveniência a seguir que permitem testar se uma cadeia de caracteres está null ou vazia:

  • IsNullOrEmpty, que indica se uma cadeia de caracteres é ou null ou igual a String.Empty. Este método elimina a necessidade de usar código como o seguinte:

    if (str == null || str.Equals(String.Empty))
    
    if str = null || str.Equals String.Empty then
    
    If str Is Nothing OrElse str.Equals(String.Empty) Then
    
  • IsNullOrWhiteSpace, que indica se uma cadeia de caracteres corresponde a null, é igual a String.Empty ou consiste exclusivamente em caracteres de espaço em branco. Este método elimina a necessidade de usar código como o seguinte:

    if (str == null || str.Equals(String.Empty) || str.Trim().Equals(String.Empty))
    
    if str = null || str.Equals String.Empty || str.Trim().Equals String.Empty then
    
    If str Is Nothing OrElse str.Equals(String.Empty) OrElse str.Trim().Equals(String.Empty) Then
    

O exemplo a seguir usa o método IsNullOrEmpty na implementação IFormattable.ToString de uma classe personalizada Temperature. O método suporta as cadeias de caracteres de formato "G", "C", "F" e "K". Se uma cadeia de caracteres de formato vazio ou uma cadeia de caracteres de formato cujo valor é null passado para o método, seu valor é alterado para a cadeia de caracteres de formato "G".

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));
   }                                   
}
member _.ToString(format: string, provider: IFormatProvider) =
    let format = 
        if String.IsNullOrEmpty format then "G" else format
    
    let provider: IFormatProvider = 
        if provider = null then CultureInfo.CurrentCulture else provider

    match format.ToUpperInvariant() with
    // Return degrees in Celsius.
    | "G"
    | "C" ->
        temp.ToString("F2", provider) + "°C"
    // Return degrees in Fahrenheit.
    | "F" ->
        (temp * 9. / 5. + 32.).ToString("F2", provider) + "°F"
    // Return degrees in Kelvin.
    | "K" ->
        (temp + 273.15).ToString()
    | _ ->
        raise (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

Imutabilidade e a classe StringBuilder

Um String objeto é chamado de imutável (somente leitura), porque seu valor não pode ser modificado depois de ter sido criado. Os métodos que parecem modificar um String objeto realmente retornam um novo String objeto que contém a modificação.

Como as cadeias de caracteres são imutáveis, as rotinas de manipulação de cadeia de caracteres que executam adições ou exclusões repetidas ao que parece ser uma única cadeia de caracteres podem exigir uma penalidade de desempenho significativa. Por exemplo, o código a seguir usa um gerador de números aleatórios para criar uma cadeia de caracteres com 1000 caracteres no intervalo 0x0001 para 0x052F. Embora o código pareça usar concatenação de cadeia de caracteres para acrescentar um novo caractere à cadeia de caracteres existente chamada str, ele realmente cria um novo String objeto para cada operação de concatenação.

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 += (char)rnd.Next(1, 0x0530);
         if (str.Length % 60 == 0)
            str += Environment.NewLine;          
      }                    
      sw.Write(str);
      sw.Close();
   }
}
open System
open System.IO
open System.Text

do
    let rnd = Random()

    let mutable str = String.Empty
    use sw = new StreamWriter(@".\StringFile.txt", false, Encoding.Unicode)
    for _ = 0 to 1000 do
        str <- str + (rnd.Next(1, 0x0530) |> char |> string)
        if str.Length % 60 = 0 then
            str <- str + Environment.NewLine
    sw.Write str
Imports System.IO
Imports System.Text

Module Example10
    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, &H530))
            If str.Length Mod 60 = 0 Then str += vbCrLf
        Next
        sw.Write(str)
        sw.Close()
    End Sub
End Module

Você pode usar a StringBuilder classe em vez da String classe para operações que fazem várias alterações no valor de uma cadeia de caracteres. Ao contrário de instâncias da classe String, objetos StringBuilder são mutáveis; ao concatenar, acrescentar ou excluir substrings de uma string, as operações são executadas em uma única string. Quando terminar de modificar o valor de um StringBuilder objeto, você poderá chamar seu StringBuilder.ToString método para convertê-lo em uma cadeia de caracteres. O exemplo a seguir substitui o String usado no exemplo anterior para concatenar 1000 caracteres aleatórios no intervalo para 0x0001 para 0x052F com um StringBuilder objeto.

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((char)rnd.Next(1, 0x0530));
         if (sb.Length % 60 == 0)
            sb.AppendLine();          
      }                    
      sw.Write(sb.ToString());
      sw.Close();
   }
}
open System
open System.IO
open System.Text

do
    let rnd = Random()
    let sb = StringBuilder()
    use sw = new StreamWriter(@".\StringFile.txt", false, Encoding.Unicode)

    for _ = 0 to 1000 do
        sb.Append(rnd.Next(1, 0x0530) |> char) |> ignore
        if sb.Length % 60 = 0 then
            sb.AppendLine() |> ignore
    sw.Write(string sb)
Imports System.IO
Imports System.Text

Module Example11
    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, &H530)))
            If sb.Length Mod 60 = 0 Then sb.AppendLine()
        Next
        sw.Write(sb.ToString())
        sw.Close()
    End Sub
End Module

Operações ordinais versus operações sensíveis à cultura

Os membros da String classe realizam operações, quer ordinais, quer sensíveis à cultura (linguísticas), num String objeto. Uma operação ordinal atua sobre o valor numérico de cada Char objeto. Uma operação sensível à cultura age sobre o valor do objeto e leva em consideração as regras de invólucro, classificação, formatação e análise específicas da String cultura. As operações sensíveis à cultura são executadas no contexto de uma cultura explicitamente declarada ou da cultura atual implícita. Os dois tipos de operações podem produzir resultados muito diferentes quando são executados na mesma cadeia de caracteres.

O .NET também oferece suporte a operações de cadeia de caracteres linguísticas insensíveis à cultura usando a cultura invariante (CultureInfo.InvariantCulture), que é vagamente baseada nas configurações de cultura do idioma inglês independente da região. Ao contrário de outras System.Globalization.CultureInfo configurações, as configurações da cultura invariante são garantidas para permanecer consistente em um único computador, de sistema para sistema e entre as versões do .NET. A cultura invariante pode ser vista como uma espécie de caixa preta que garante a estabilidade das comparações e ordenações de cadeias em todas as culturas.

Importante

Se seu aplicativo tomar uma decisão de segurança sobre um identificador simbólico, como um nome de arquivo ou pipe nomeado, ou sobre dados persistentes, como os dados baseados em texto em um arquivo XML, a operação deverá usar uma comparação ordinal em vez de uma comparação sensível à cultura. Isso ocorre porque uma comparação sensível à cultura pode produzir resultados diferentes dependendo da cultura em vigor, enquanto uma comparação ordinal depende apenas do valor binário dos caracteres comparados.

Importante

A maioria dos métodos que executam operações de cadeia de texto inclui uma sobrecarga que tem um parâmetro do tipo StringComparison, que permite-lhe especificar se o método realiza uma operação ordinal ou culturalmente sensível. Em geral, você deve chamar essa sobrecarga para deixar clara a intenção da chamada do método. Para obter práticas recomendadas e orientações para o uso de operações ordinais e sensíveis à cultura em cadeias de caracteres, consulte Práticas recomendadas para usar cadeias de caracteres.

As operações de invólucro, análise e formatação, comparação e classificação e teste de igualdade podem ser ordinais ou sensíveis à cultura. As seções a seguir discutem cada categoria de operação.

Tip

Você deve sempre chamar uma sobrecarga de método para deixar clara a intenção da sua chamada de método. Por exemplo, em vez de chamar o Compare(String, String) método para executar uma comparação sensível à cultura de duas cadeias de caracteres usando as convenções da cultura atual, você deve chamar o Compare(String, String, StringComparison) método com um valor de StringComparison.CurrentCulture para o comparisonType argumento. Para obter mais informações, consulte Práticas recomendadas para o uso de cadeias de caracteres.

Pode descarregar as tabelas de pesos de ordenação, um conjunto de ficheiros de texto que contêm informações sobre os pesos dos caracteres usados nas operações de ordenação e comparação, a partir da Tabela de Elementos de Colação Unicode Padrão.

Invólucro

As regras de capitalização determinam como alterar a capitalização de um caractere Unicode; por exemplo, de minúsculas para maiúsculas. Muitas vezes, uma operação de invólucro é executada antes de uma comparação de cadeia de caracteres. Por exemplo, uma cadeia de caracteres pode ser convertida em maiúsculas para que possa ser comparada com outra cadeia de caracteres maiúsculas. Você pode converter os caracteres em uma cadeia de caracteres em minúsculas chamando o ToLower método ou ToLowerInvariant e convertê-los em maiúsculas chamando o ToUpper método ou ToUpperInvariant . Além disso, pode usar o TextInfo.ToTitleCase método para converter uma cadeia de caracteres em maiúsculas iniciais.

Note

.NET Core apenas em execução em sistemas Linux e macOS: O comportamento de agrupamento para as culturas C e Posix diferencia sempre maiúsculas e minúsculas porque essas culturas não usam a ordenação Unicode esperada. Recomendamos que você use uma cultura diferente de C ou Posix para executar operações de classificação sensíveis à cultura e que não diferenciam maiúsculas de minúsculas.

As operações de invólucro podem ser baseadas nas regras da cultura atual, em uma cultura específica ou na cultura invariante. Como os mapeamentos de casos podem variar dependendo da cultura usada, o resultado das operações de invólucro pode variar com base na cultura. As diferenças reais no invólucro são de três tipos:

  • Diferenças no mapeamento de casos de LATIN CAPITAL LETTER I (U+0049), LATIN SMALL LETTER I (U+0069), LATIN CAPITAL LETTER I WITH DOT ABOVE (U+0130) e LATIN SMALL LETTER DOTLESS I (U+0131). Nas culturas tr-TR (turco (Turquia)) e az-Latn-AZ (Azerbaijão, latim), e nas culturas neutras tr, az e az-Latn, o equivalente minúsculo de LATIN CAPITAL LETTER I é LATIN SMALL LETTER I SEM PONTO, e o equivalente maiúsculo de LATIN SMALL LETTER I é LATIN CAPITAL LETTER I COM PONTO EM CIMA. Em todas as outras culturas, incluindo a cultura invariante, LATIN SMALL LETTER I e LATIN CAPITAL LETTER I são equivalentes minúsculos e maiúsculos.

    O exemplo a seguir demonstra como uma comparação de cadeia de caracteres projetada para impedir o acesso ao sistema de arquivos pode falhar se depender de uma comparação de caixa sensível à cultura. (As convenções de revestimento da cultura invariante deveriam ter sido usadas.)

    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
    
    open System
    open System.Globalization
    open System.Threading
    
    let disallowed = "file"
    
    let isAccessAllowed (resource: string) =
        let cultures = 
            [| CultureInfo.CreateSpecificCulture "en-US"
               CultureInfo.CreateSpecificCulture "tr-TR" |]
        let index = resource.IndexOfAny [| '\\'; '/' |]
        let scheme =
            if index > 0 then
                resource.Substring(0, index - 1)
            else 
                null
    
        // Change the current culture and perform the comparison.
        for culture in cultures do
            Thread.CurrentThread.CurrentCulture <- culture
            printfn $"Culture: {CultureInfo.CurrentCulture.DisplayName}"
            printfn $"{resource}"
            printfn $"Access allowed: {String.Equals(disallowed, scheme, StringComparison.CurrentCultureIgnoreCase) |> not}"
            printfn ""
            
    isAccessAllowed @"FILE:\\\c:\users\user001\documents\FinancialInfo.txt"
    // 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 Example2
        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
    
  • Diferenças nos mapeamentos de casos entre a cultura invariante e todas as outras culturas. Nesses casos, usar as regras de maiúsculas/minúsculas da cultura invariante para alterar um caractere para maiúsculas ou minúsculas resulta no mesmo caractere. Para todas as outras culturas, ele retorna um caractere diferente. Alguns dos caracteres afetados estão listados na tabela a seguir.

    Personagem Se alterado para Devoluções
    SINAL DE MÍCRON (U+00B5) Maiúsculas LETRA MAIÚSCULA GREGA MU (U+-39C)
    LETRA MAIÚSCULA LATINA I COM PONTO ACIMA (U+0130) Minúsculas LETRA PEQUENA LATINA I (U+0069)
    LETRA PEQUENA LATINA DOTLESS I (U+0131) Maiúsculas LETRA MAIÚSCULA LATINA I (U+0049)
    LETRA LATINA PEQUENA LONGA S (U+017F) Maiúsculas LETRA MAIÚSCULA LATINA S (U+0053)
    LETRA D MAIÚSCULA LATINA COM LETRA Z MINÚSCULA COM CARON (U+01C5) Minúsculas LETRA MINÚSCULA LATINA DZ COM CARON (U+01C6)
    COMBINAÇÃO DE YPOGEGRAMMENI GREGO (U+0345) Maiúsculas LETRA MAIÚSCULA GREGA IOTA (U+0399)
  • Diferenças nos mapeamentos de pares de duas letras com maiúsculas e minúsculas no intervalo ASCII. Na maioria das culturas, um par misto de duas letras é igual ao par equivalente de duas letras maiúsculas ou minúsculas. Isto não é verdade para os seguintes pares de duas letras nas seguintes culturas, porque em cada caso eles são comparados a um dígrafo:

    • "lJ" e "nJ" na cultura croata (hr-HR, Croácia).
    • "cH" nas culturas checa (cs-CZ, República Checa) e eslovaca (sk-SK, Eslováquia).
    • "aA" na cultura da-DK (dinamarquesa (Dinamarca)).
    • "cS", "dZ", "dZS", "nY", "sZ", "tY" e "zS" na cultura hu-HU (húngaro (Hungria)).
    • "cH" e "lL" na cultura es-ES_tradnl (Espanhol (Espanha, Classificação Tradicional)).
    • "cH", "gI", "kH", "nG" "nH", "pH", "qU', "tH" e "tR" na cultura vi-VN (vietnamita (Vietname)).

    No entanto, é incomum encontrar uma situação em que uma comparação sensível à cultura desses pares cria problemas, porque esses pares são incomuns em cadeias de caracteres fixas ou identificadores.

O exemplo a seguir ilustra algumas das diferenças nas regras de capitalização entre culturas ao converter texto para maiúsculas.

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
open System
open System.Globalization
open System.IO

let showHexValue (s: string) =
    let mutable retval = ""
    for ch in s do
        let bytes = BitConverter.GetBytes ch
        retval <- retval + String.Format("{0:X2} {1:X2} ", bytes[1], bytes[0])
    retval

do
    use sw = new StreamWriter(@".\case.txt")
    let words = [| "file"; "sıfır"; "Dženana" |]
    let cultures = 
        [| CultureInfo.InvariantCulture 
           CultureInfo "en-US"
           CultureInfo "tr-TR" |]

    for word in words do
        sw.WriteLine("{0}:", word)
        for culture in cultures do
            let name =
                 if String.IsNullOrEmpty culture.Name then "Invariant" else culture.Name
            let upperWord = word.ToUpper culture
            sw.WriteLine("   {0,10}: {1,7} {2, 38}", name, upperWord, showHexValue upperWord)
        sw.WriteLine()
    sw.Close()

// 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 Example1
    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

Análise e formatação

A formatação e a análise são operações inversas. As regras de formatação determinam como converter um valor, como uma data e hora ou um número, em sua representação de cadeia de caracteres, enquanto as regras de análise determinam como converter uma representação de cadeia de caracteres em um valor, como data e hora. Tanto as regras de formatação quanto as de análise dependem de convenções culturais. O exemplo a seguir ilustra a ambiguidade que pode surgir ao interpretar uma cadeia de caracteres de data específica da cultura. Sem conhecer as convenções da cultura que foi usada para produzir uma sequência de datas, não é possível saber se 01/03/2011, 01/03/2011 e 01/03/2011 representam 3 de janeiro de 2011 ou 1º de março de 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
open System
open System.Globalization

let date = DateTime(2011, 3, 1)
let cultures = 
      [| CultureInfo.InvariantCulture
         CultureInfo "en-US"
         CultureInfo "fr-FR" |]

for culture in cultures do
    printfn $"""{(if String.IsNullOrEmpty culture.Name then "Invariant" else culture.Name),-12} {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 Example8
    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

Da mesma forma, como mostra o exemplo a seguir, uma única cadeia de caracteres pode produzir datas diferentes dependendo da cultura cujas convenções são usadas na operação de análise.

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
open System
open System.Globalization

let dateString = "07/10/2011"
let cultures = 
    [| CultureInfo.InvariantCulture
       CultureInfo.CreateSpecificCulture "en-GB"
       CultureInfo.CreateSpecificCulture "en-US" |]
printfn $"""{"Date String",-12} {"Culture",10} {"Month",8} {"Day",8}\n"""
for culture in cultures do
    let date = DateTime.Parse(dateString, culture)
    printfn $"""{dateString,-12} {(if String.IsNullOrEmpty culture.Name then "Invariant" else culture.Name),10} {date.Month,8} {date.Day,8}"""
// 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 Example18
    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

Comparação e classificação de cadeias de caracteres

As convenções para comparar e classificar cadeias de caracteres variam de cultura para cultura. Por exemplo, a ordem de classificação pode ser baseada na fonética ou na representação visual de caracteres. Nas línguas do Leste Asiático, os caracteres são ordenados pelo traçado e o radical dos ideógrafos. A classificação também depende da ordem que as línguas e culturas usam para o alfabeto. Por exemplo, a língua dinamarquesa tem um caractere "Æ" que vem após o "Z" no alfabeto. Além disso, as comparações podem diferenciar maiúsculas de minúsculas ou ser insensíveis a essa diferença, e as regras de capitalização podem diferir de acordo com a cultura. A comparação ordinal, por outro lado, usa os pontos de código Unicode de caracteres individuais em uma cadeia de caracteres ao comparar e classificar cadeias de caracteres.

As regras de classificação determinam a ordem alfabética dos caracteres Unicode e como duas cadeias de caracteres se comparam entre si. Por exemplo, o String.Compare(String, String, StringComparison) método compara duas cadeias de caracteres com base no StringComparison parâmetro. Se o valor do parâmetro for StringComparison.CurrentCulture, o método executa uma comparação linguística que usa as convenções da cultura atual, se o valor do parâmetro for StringComparison.Ordinal, o método executa uma comparação ordinal. Consequentemente, como mostra o exemplo a seguir, se a cultura atual for o inglês dos EUA, a primeira chamada para o método String.Compare(String, String, StringComparison) (usando comparação sensível à cultura) considera "a" inferior a "A", mas a segunda chamada para o mesmo método (usando comparação ordinal) considera que "a" é maior que "A".

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
open System
open System.Globalization
open System.Threading

Thread.CurrentThread.CurrentCulture <- CultureInfo.CreateSpecificCulture "en-US"
printfn $"""{String.Compare("A", "a", StringComparison.CurrentCulture)}"""
printfn $"""{String.Compare("A", "a", StringComparison.Ordinal)}"""
// The example displays the following output:
//       1
//       -32
Imports System.Globalization
Imports System.Threading

Module Example3
    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

O .NET oferece suporte a regras de classificação de palavras, cadeias de caracteres e ordinais:

  • Uma classificação de palavras executa uma comparação sensível à cultura de cadeias de caracteres nas quais certos caracteres Unicode não alfanuméricos podem ter pesos especiais atribuídos a eles. Por exemplo, o hífen (-) pode ter um peso muito pequeno atribuído a ele para que "coop" e "co-op" apareçam um ao lado do outro em uma lista classificada. Para obter uma lista dos métodos que comparam duas cadeias de caracteres usando regras de classificação de palavras, consulte a seção Operações de cadeia de String caracteres por categoria.

  • Uma classificação de cadeia de caracteres também executa uma comparação sensível à cultura. É semelhante a uma classificação de palavras, exceto que não há casos especiais, e todos os símbolos não alfanuméricos vêm antes de todos os caracteres Unicode alfanuméricos. Duas cadeias de caracteres podem ser comparadas usando regras de classificação de cadeia de caracteres chamando as CompareInfo.Compare sobrecargas de método que têm um options parâmetro que recebe um valor de CompareOptions.StringSort. Observe que esse é o único método que o .NET fornece para comparar duas cadeias de caracteres usando regras de classificação de cadeia de caracteres.

  • Uma classificação ordinal compara cadeias de caracteres com base no valor numérico de cada Char objeto na cadeia de caracteres. Uma comparação ordinal é automaticamente sensível a maiúsculas e minúsculas porque as versões minúsculas e maiúsculas de um caractere têm pontos de código diferentes. No entanto, se o caso não for importante, pode especificar uma comparação ordinal que ignore a diferenciação de maiúsculas. Isso é equivalente a converter a sequência em maiúsculas usando a cultura invariante e, em seguida, executar uma comparação ordinal no resultado. Para obter uma lista dos métodos que comparam duas cadeias de caracteres usando regras de classificação ordinal, consulte a seção Operações de cadeia de String caracteres por categoria.

Uma comparação sensível à cultura é qualquer comparação que usa explícita ou implicitamente um CultureInfo objeto, incluindo a cultura invariante especificada pela CultureInfo.InvariantCulture propriedade. A cultura implícita é a cultura atual, que é especificada pelas Thread.CurrentCulture e CultureInfo.CurrentCulture propriedades. Existe uma variação considerável na ordem de ordenação dos caracteres alfabéticos (ou seja, caracteres para os quais o Char.IsLetter método devolve true) entre culturas. Você pode especificar uma comparação sensível à cultura que usa as convenções de uma cultura específica fornecendo um CultureInfo objeto para um método de comparação de cadeia de caracteres, como Compare(String, String, CultureInfo, CompareOptions). Você pode especificar uma comparação sensível à cultura que usa as convenções da cultura atual fornecendo StringComparison.CurrentCulture, StringComparison.CurrentCultureIgnoreCase, ou qualquer membro da enumeração CompareOptions, que seja diferente de CompareOptions.Ordinal ou CompareOptions.OrdinalIgnoreCase, para uma sobrecarga apropriada do método Compare. Uma comparação sensível à cultura é geralmente apropriada para a classificação, enquanto uma comparação ordinal não é. Uma comparação ordinal é geralmente apropriada para determinar se duas cadeias são iguais (isto é, para determinar a identidade), enquanto uma comparação sensível à cultura não é.

O exemplo a seguir ilustra a diferença entre comparação cultural e ordinal. O exemplo avalia três strings, "Apple", "Æble" e "AEble", usando uma comparação ordinal e as convenções culturais de da-DK e en-US (cada uma das quais é a cultura padrão no momento em que o método Compare é chamado). Como a língua dinamarquesa trata o caractere "Æ" como uma letra individual e o classifica depois de "Z" no alfabeto, a string "Æble" é maior do que "Apple". No entanto, "Æble" não é considerado equivalente a "AEble", portanto "Æble" também é maior que "AEble". A cultura en-US não inclui a letra "Æ", mas a trata como equivalente a "AE", o que explica por que "Æble" é menor que "Apple", mas igual a "AEble". A comparação ordinal, por outro lado, considera "Apple" menor que "Æble", e "Æble" maior que "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
open System
open System.Globalization
open System.Threading

let str1 = "Apple"
let str2 = "Æble"
let str3 = "AEble"

// Set the current culture to Danish in Denmark.
Thread.CurrentThread.CurrentCulture <- CultureInfo "da-DK"
printfn $"Current culture: {CultureInfo.CurrentCulture.Name}"
printfn $"Comparison of {str1} with {str2}: {String.Compare(str1, str2)}"
printfn $"Comparison of {str2} with {str3}: {String.Compare(str2, str3)}\n"

// Set the current culture to English in the U.S.
Thread.CurrentThread.CurrentCulture <- CultureInfo "en-US"
printfn $"Current culture: {CultureInfo.CurrentCulture.Name}"
printfn $"Comparison of {str1} with {str2}: {String.Compare(str1, str2)}"
printfn $"Comparison of {str2} with {str3}: {String.Compare(str2, str3)}\n"

// Perform an ordinal comparison.
printfn "Ordinal comparison"
printfn $"Comparison of {str1} with {str2}: {String.Compare(str1, str2, StringComparison.Ordinal)}"
printfn $"Comparison of {str2} with {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 Example6
    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 as seguintes diretrizes gerais para escolher um método de classificação ou comparação de cadeia de caracteres apropriado:

  • Se você quiser que as cadeias de caracteres sejam ordenadas com base na cultura do usuário, você deve ordená-las com base nas convenções da cultura atual. Se a cultura do usuário mudar, a ordem das cadeias de caracteres classificadas também será alterada de acordo. Por exemplo, um aplicativo de dicionário de sinônimos deve sempre classificar palavras com base na cultura do usuário.

  • Se desejar que as cadeias de caracteres sejam ordenadas com base nas convenções de uma cultura específica, você deve ordená-las fornecendo um CultureInfo objeto que represente essa cultura para um método de comparação. Por exemplo, em um aplicativo projetado para ensinar aos alunos um idioma específico, você deseja que as cadeias de caracteres sejam ordenadas com base nas convenções de uma das culturas que fala esse idioma.

  • Se você quiser que a ordem das cadeias de caracteres permaneça inalterada entre culturas, você deve ordená-las com base nas convenções da cultura invariante ou usar uma comparação ordinal. Por exemplo, usaria uma ordenação ordinal para organizar os nomes de ficheiros, processos, mutexes ou tubos nomeados.

  • Para uma comparação que envolve uma decisão de segurança (como se um nome de usuário é válido), deve-se sempre executar um teste ordinal para igualdade chamando uma sobrecarga do método Equals.

Note

As regras de ordenação e maiúsculas sensíveis à cultura usadas na comparação de strings dependem da versão do Padrão Unicode suportada pelo sistema operativo subjacente.

Para obter mais informações sobre regras de classificação de palavras, cadeias de caracteres e ordinais, consulte o System.Globalization.CompareOptions tópico . Para obter recomendações adicionais sobre quando usar cada regra, consulte Práticas recomendadas para usar cadeias de caracteres.

Normalmente, você não chama métodos de comparação de cadeia de caracteres, como Compare diretamente, para determinar a ordem de classificação das cadeias de caracteres. Em vez disso, os métodos de comparação são chamados por métodos de classificação, como Array.Sort ou List<T>.Sort. O exemplo a seguir executa quatro operações de classificação diferentes (classificação de palavras usando a cultura atual, classificação de palavras usando a cultura invariante, classificação ordinal e classificação de cadeia de caracteres usando a cultura invariante) sem chamar explicitamente um método de comparação de cadeia de caracteres, embora eles especifiquem o tipo de comparação a ser usado. Observe que cada tipo de classificação produz uma ordenação exclusiva de cadeias de caracteres em sua matriz.

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
open System
open System.Collections.Generic
open System.Globalization

// IComparer<String> implementation to perform string sort using an F# object expression.
let scompare = 
    { new IComparer<String> with
        member _.Compare(x, y) =
            CultureInfo.CurrentCulture.CompareInfo.Compare(x, y, CompareOptions.StringSort) }

let strings = [| "coop"; "co-op"; "cooperative"; "co\u00ADoperative"; "cœur"; "coeur" |]

// Perform a word sort using the current (en-US) culture.
let current = Array.copy strings
Array.Sort(current, StringComparer.CurrentCulture)

// Perform a word sort using the invariant culture.
let invariant = Array.copy strings
Array.Sort(invariant, StringComparer.InvariantCulture)

// Perform an ordinal sort.
let ordinal = Array.copy strings
Array.Sort(ordinal, StringComparer.Ordinal)

// Perform a string sort using the current culture.
let stringSort = Array.copy strings
Array.Sort(stringSort, scompare)

// Display array values
printfn "%13s %13s %15s %13s %13s\n" "Original" "Word Sort" "Invariant Word" "Ordinal Sort" "String Sort"
for i = 0 to strings.Length - 1 do
    printfn "%13s %13s %15s %13s %13s\n" strings[i] current[i] invariant[i] ordinal[i] stringSort[i]

// 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 Example4
    Public Sub Main()
        Dim strings() As String = {"coop", "co-op", "cooperative",
                                  "co" + ChrW(&HAD) + "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

Tip

Internamente, o .NET usa chaves de classificação para oferecer suporte à comparação de cadeia de caracteres culturalmente sensível. Cada caractere numa cadeia de caracteres recebe várias categorias de pesos de classificação, incluindo alfabético, capitalização e diacrítico. Uma chave de classificação, representada pela SortKey classe, fornece um repositório desses pesos para uma cadeia de caracteres específica. Se seu aplicativo executar um grande número de operações de pesquisa ou classificação no mesmo conjunto de cadeias de caracteres, você poderá melhorar seu desempenho gerando e armazenando chaves de classificação para todas as cadeias de caracteres que ele usa. Quando uma operação de classificação ou comparação é necessária, você usa as chaves de classificação em vez das cadeias de caracteres. Para obter mais informações, consulte a classe SortKey.

Se não especificar uma convenção de comparação de cadeia de caracteres, os métodos de classificação, como Array.Sort(Array), executam uma classificação sensível à cultura e sensível ao caso em cadeias de caracteres. O exemplo a seguir ilustra como a alteração da cultura atual afeta a ordem das cadeias de caracteres classificadas em uma matriz. Ele cria uma matriz de três cadeias de caracteres. Primeiro, ele define a System.Threading.Thread.CurrentThread.CurrentCulture propriedade como en-US e chama o Array.Sort(Array) método. A ordem de classificação resultante é baseada em convenções de classificação para a cultura inglesa (Estados Unidos). Em seguida, o exemplo define a System.Threading.Thread.CurrentThread.CurrentCulture propriedade como da-DK e chama o Array.Sort método novamente. Observe como a ordem de classificação resultante difere dos resultados em inglês dos Estados Unidos porque usa as convenções de ordenação para a língua dinamarquesa (da Dinamarca).

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
open System
open System.Globalization
open System.Threading

let printIndexAndValues (myArray: string[]) =
    for i = myArray.GetLowerBound 0 to myArray.GetUpperBound 0 do
        printfn $"[{i}]: {myArray[i]}" 
    printfn ""

// Create and initialize a new array to store the strings.
let stringArray = [| "Apple"; "Æble"; "Zebra" |]

// Display the values of the array.
printfn "The original string array:"
printIndexAndValues stringArray

// Set the CurrentCulture to "en-US".
Thread.CurrentThread.CurrentCulture <- CultureInfo "en-US"
// Sort the values of the array.
Array.Sort stringArray

// Display the values of the array.
printfn "After sorting for the culture \"en-US\":"
printIndexAndValues stringArray

// Set the CurrentCulture to "da-DK".
Thread.CurrentThread.CurrentCulture <- CultureInfo "da-DK"
// Sort the values of the Array.
Array.Sort stringArray

// Display the values of the array.
printfn "After sorting for the culture \"da-DK\":"
printIndexAndValues stringArray
// 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

Warning

Se o seu objetivo principal na comparação de cadeias de caracteres é determinar se elas são iguais, você deve chamar o String.Equals método. Normalmente, você deve usar Equals para executar uma comparação ordinal. O String.Compare método destina-se principalmente a classificar cadeias de caracteres.

Os métodos de pesquisa de cadeia de caracteres, como String.StartsWith e String.IndexOf, também podem realizar comparações de cadeia de caracteres ordinais ou sensíveis à cultura. O exemplo a seguir ilustra as diferenças entre comparações ordinais e sensíveis à cultura usando o IndexOf método. Numa pesquisa sensível ao contexto cultural, em que o contexto atual é o inglês (Estados Unidos), a substring "oe" é considerada equivalente à ligadura "œ". Como um hífen suave (U+00AD) é um caractere de largura zero, a pesquisa trata o hífen suave como equivalente a String.Empty e encontra uma correspondência no início da cadeia de caracteres. Uma pesquisa ordinal, por outro lado, não encontra uma correspondência em ambos os casos.

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
open System

let findInString (s: string) (substring: string) (options: StringComparison) =
    let result = s.IndexOf(substring, options)
    if result <> -1 then
        printfn $"'{substring}' found in {s} at position {result}"
    else
        printfn $"'{substring}' not found in {s}"

// Search for "oe" and "œu" in "œufs" and "oeufs".
let s1 = "œufs"
let s2 = "oeufs"
findInString s1 "oe" StringComparison.CurrentCulture
findInString s1 "oe" StringComparison.Ordinal
findInString s2 "œu" StringComparison.CurrentCulture
findInString s2 "œu" StringComparison.Ordinal
printfn ""

let s3 = "co\u00ADoperative"
findInString s3 "\u00AD" StringComparison.CurrentCulture
findInString s3 "\u00AD" StringComparison.Ordinal

// 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 Example5
    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(&HAD)
        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 Then
            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

Pesquisar em sequências de texto

Os métodos de pesquisa de cadeia de caracteres, como String.StartsWith e String.IndexOf, também podem realizar comparações de cadeia de caracteres ordinais ou sensíveis à cultura para determinar se um caractere ou substring é encontrado em uma cadeia de caracteres especificada.

Os métodos de pesquisa na String classe que procuram um caractere individual, como o IndexOf método, ou um de um conjunto de caracteres, como o IndexOfAny método, todos executam uma pesquisa ordinal. Para executar uma pesquisa sensível à cultura de um personagem, você deve chamar um CompareInfo método como CompareInfo.IndexOf(String, Char) ou CompareInfo.LastIndexOf(String, Char). Observe que os resultados da busca por um personagem usando comparação ordinal e sensível à cultura podem ser muito diferentes. Por exemplo, uma busca por um caractere Unicode pré-composto como a ligadura "Æ" (U+00C6) pode corresponder a qualquer ocorrência de seus componentes na sequência correta, como "AE" (U+041U+0045), dependendo da cultura. O exemplo a seguir ilustra a diferença entre os String.IndexOf(Char) métodos e CompareInfo.IndexOf(String, Char) ao procurar um caractere individual. O caractere de ligação "æ" (U+00E6) é encontrado na sequência de caracteres "aerial" quando se usam as convenções da cultura EN-US, mas não ao usar as convenções da cultura DA-DK ou ao realizar uma comparação ordinal.

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
open System.Globalization

let cultureNames = [| "da-DK"; "en-US" |]
let str = "aerial"
let ch = 'æ'  // U+00E6

printf "Ordinal comparison -- "
printfn $"Position of '{ch}' in {str}: {str.IndexOf ch}"
                  
for cultureName in cultureNames do
    let ci = CultureInfo.CreateSpecificCulture(cultureName).CompareInfo
    printf $"{cultureName} cultural comparison -- "
    printfn $"Position of '{ch}' in {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 Example19
    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

Por outro lado, String os métodos de classe que procuram uma cadeia de caracteres em vez de um caractere executam uma pesquisa sensível à cultura se as opções de pesquisa não forem especificadas explicitamente por um parâmetro do tipo StringComparison. A única exceção é Contains, que realiza uma pesquisa ordinal.

Teste de igualdade

Use o String.Compare método para determinar a relação de duas cadeias de caracteres na ordem de classificação. Normalmente, esta é uma operação sensível à cultura. Em contrapartida, chame o método String.Equals para testar a igualdade. Como o teste de igualdade geralmente compara a entrada do usuário com alguma cadeia de caracteres conhecida, como um nome de usuário válido, uma senha ou um caminho do sistema de arquivos, normalmente é uma operação ordinal.

Warning

É possível testar a igualdade chamando o String.Compare método e determinando se o valor de retorno é zero. No entanto, esta prática não é recomendada. Para determinar se duas cadeias de caracteres são iguais, você deve chamar uma das sobrecargas do String.Equals método. A sobrecarga preferida a ser chamada é o método de instância Equals(String, StringComparison) ou o método estático Equals(String, String, StringComparison), pois ambos os métodos incluem um parâmetro System.StringComparison que especifica explicitamente o tipo de comparação.

O exemplo a seguir ilustra o perigo de realizar uma comparação sensível à cultura para a igualdade quando uma comparação ordinal deve ser usada em vez disso. Nesse caso, a intenção do código é proibir o acesso ao sistema de arquivos de URLs que começam com "FILE://" ou "file://", executando uma comparação sem diferenciação de maiúsculas e minúsculas do início de uma URL com a cadeia de caracteres "FILE://". No entanto, se uma comparação sensível à cultura é realizada usando a cultura turca (Turquia) em um URL que começa com "file://", a comparação para igualdade falha, porque o equivalente turco maiúsculo do "i" minúsculo é "İ" em vez de "I". Como resultado, o acesso ao sistema de arquivos é inadvertidamente permitido. Por outro lado, se uma comparação ordinal for realizada, a comparação para igualdade será bem-sucedida e o acesso ao sistema de arquivos será negado.

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.
open System
open System.Globalization
open System.Threading

let testForEquality (str: string) (cmp: StringComparison) =
    let position = str.IndexOf "://"
    if position < 0 then false
    else
        let substring = str.Substring(0, position)
        substring.Equals("FILE", cmp)

Thread.CurrentThread.CurrentCulture <- CultureInfo.CreateSpecificCulture "tr-TR"

let filePath = "file://c:/notes.txt"

printfn "Culture-sensitive test for equality:"
if not (testForEquality filePath StringComparison.CurrentCultureIgnoreCase) then
    printfn $"Access to {filePath} is allowed."
else
    printfn $"Access to {filePath} is not allowed."

printfn "\nOrdinal test for equality:"
if not (testForEquality filePath StringComparison.OrdinalIgnoreCase) then
    printfn $"Access to {filePath} is allowed."
else
    printfn $"Access to {filePath} is not allowed."

// 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 Example7
    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.

Normalização

Alguns caracteres Unicode têm várias representações. Por exemplo, qualquer um dos seguintes pontos de código pode representar a letra "ắ":

  • U+1EAF
  • U+0103 U+0301
  • U+0061 U+0306 U+0301

Várias representações para um único caractere complicam a pesquisa, classificação, correspondência e outras operações de cadeia de caracteres.

O padrão Unicode define um processo chamado normalização que retorna uma representação binária de um caractere Unicode para qualquer uma de suas representações binárias equivalentes. A normalização pode usar vários algoritmos, chamados formas de normalização, que seguem regras diferentes. O .NET suporta formulários de normalização Unicode C, D, KC e KD. Quando as cadeias de caracteres foram normalizadas para a mesma forma de normalização, elas podem ser comparadas usando a comparação ordinal.

Uma comparação ordinal é uma comparação binária do valor escalar Unicode de objetos correspondentes Char em cada cadeia de caracteres. A String classe inclui vários métodos que podem executar uma comparação ordinal, incluindo o seguinte:

Você pode determinar se uma cadeia de caracteres é normalizada para o formulário de normalização C chamando o String.IsNormalized() método, ou você pode chamar o String.IsNormalized(NormalizationForm) método para determinar se uma cadeia de caracteres é normalizada para um formulário de normalização especificado. Você também pode chamar o String.Normalize() método para converter uma cadeia de caracteres para o formulário de normalização C ou pode chamar o String.Normalize(NormalizationForm) método para converter uma cadeia de caracteres em um formulário de normalização especificado. Para obter informações passo a passo sobre como normalizar e comparar cadeias de caracteres, consulte os Normalize() métodos e Normalize(NormalizationForm) .

O exemplo simples a seguir ilustra a normalização da cadeia de caracteres. Ele define a letra "ố" de três maneiras diferentes em três cadeias diferentes, e usa uma comparação ordinal para igualdade para determinar que cada cadeia difere das outras duas strings. Em seguida, ele converte cada cadeia de caracteres para os formulários de normalização suportados e novamente executa uma comparação ordinal de cada cadeia de caracteres em um formulário de normalização especificado. Em cada caso, o segundo teste de igualdade mostra que as cadeias de caracteres são iguais.

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 += $"{(ushort)ch: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
open System
open System.IO
open System.Text

do
    use sw = new StreamWriter(@".\TestNorm1.txt")

    let showBytes (str: string) =
        let mutable result = ""
        for ch in str do
            result <- result + $"{uint16 ch:X4} "
        result.Trim()
    
    let testForEquality (words: string[]) =
        for ctr = 0 to words.Length - 2 do
            for ctr2 = ctr + 1 to words.Length - 1 do
                sw.WriteLine("{0} ({1}) = {2} ({3}): {4}",
                            words[ctr], showBytes(words[ctr]),
                            words[ctr2], showBytes(words[ctr2]),
                            words[ctr].Equals(words[ctr2], StringComparison.Ordinal))

    let normalizeStrings nf (words: string[]) =
        for i = 0 to words.Length - 1 do
            if not (words[i].IsNormalized nf) then
                words[i] <- words[i].Normalize nf
        words

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

    testForEquality [| s1; s2; s3 |]
    sw.WriteLine()

    // Normalize and compare strings using each normalization form.
    for formName in Enum.GetNames typeof<NormalizationForm> do
        sw.WriteLine("Normalization {0}:\n", formName)
        let nf = Enum.Parse(typeof<NormalizationForm>, formName) :?> NormalizationForm
        let sn = normalizeStrings nf [| s1; s2; s3|]
        testForEquality sn
        sw.WriteLine "\n"

// 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 Example16
    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(&HF4) + ChrW(&H301) + "ng"
        Dim s3 As String = "so" + ChrW(&H302) + ChrW(&H301) + "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

Para obter mais informações sobre formulários de normalização e normalização, consulte System.Text.NormalizationForm, bem como o Anexo Padrão Unicode #15: Formulários de Normalização Unicode e as Perguntas frequentes sobre normalização no site da unicode.org.

Operações de cadeia de caracteres por categoria

A String classe fornece membros para comparar cadeias de caracteres, testar cadeias de caracteres para igualdade, encontrar caracteres ou subcadeias em uma cadeia de caracteres, modificar uma cadeia de caracteres, extrair subcadeias de uma cadeia de caracteres, combinar cadeias de caracteres, formatar valores, copiar uma cadeia de caracteres e normalizar uma cadeia de caracteres.

Comparar cadeias

Você pode comparar cadeias de caracteres para determinar sua posição relativa na ordem de classificação usando os seguintes String métodos:

  • Compare Retorna um inteiro que indica a relação de uma cadeia de caracteres com uma segunda cadeia de caracteres na ordem de classificação.

  • CompareOrdinal Retorna um inteiro que indica a relação de uma cadeia de caracteres com uma segunda cadeia de caracteres com base em uma comparação de seus pontos de código.

  • CompareTo Retorna um inteiro que indica a relação da instância de cadeia de caracteres atual com uma segunda cadeia de caracteres na ordem de ordenação. O CompareTo(String) método fornece as IComparable implementações e IComparable<T> para a String classe.

Testar cadeias de caracteres para igualdade

Você chama o Equals método para determinar se duas cadeias de caracteres são iguais. A instância Equals(String, String, StringComparison) e as sobrecargas estáticas Equals(String, StringComparison) permitem especificar se a comparação é sensível à cultura ou ordinal e se o caso é considerado ou ignorado. A maioria dos testes de igualdade são ordinais, e as comparações para igualdade que determinam o acesso a um recurso do sistema (como um objeto de sistema de arquivos) devem ser sempre ordinais.

Localizar caracteres em uma cadeia de caracteres

A String classe inclui dois tipos de métodos de pesquisa:

  • Métodos que retornam um Boolean valor para indicar se uma substring específica está presente em uma instância de cadeia de caracteres. Estes incluem os métodos Contains, EndsWith e StartsWith.

  • Métodos que indicam a posição inicial de uma substring em uma ocorrência de cadeia de caracteres. Estes incluem o IndexOf, IndexOfAny, LastIndexOf, e LastIndexOfAny métodos.

Warning

Se você quiser pesquisar uma cadeia de caracteres para um padrão específico em vez de uma subcadeia de caracteres específica, você deve usar expressões regulares. Para obter mais informações, consulte Expressões regulares do .NET.

Modificar uma cadeia de caracteres

A String classe inclui os seguintes métodos que parecem modificar o valor de uma cadeia de caracteres:

  • Insert insere uma cadeia de caracteres na instância atual String .

  • PadLeft Insere uma ou mais ocorrências de um caractere especificado no início de uma cadeia de caracteres.

  • PadRight Insere uma ou mais ocorrências de um caractere especificado no final de uma cadeia de caracteres.

  • Remove Exclui uma substring da instância atual String .

  • Replace substitui uma substring por outra substring na instância atual String .

  • ToLower e ToLowerInvariant convertem todos os caracteres numa cadeia de caracteres para minúsculas.

  • ToUpper e ToUpperInvariant convertem todos os caracteres de uma string para maiúsculas.

  • Trim Remove todas as ocorrências de um caractere do início e do fim de uma cadeia de caracteres.

  • TrimEnd Remove todas as ocorrências de um caractere do final de uma cadeia de caracteres.

  • TrimStart Remove todas as ocorrências de um caractere do início de uma cadeia de caracteres.

Importante

Todos os métodos de modificação de cadeia de caracteres retornam um novo String objeto. Eles não modificam o valor da instância atual.

Extrair substrings de uma cadeia de caracteres

O String.Split método separa uma única cadeia de caracteres em várias cadeias de caracteres. As sobrecargas do método permitem especificar vários delimitadores, limitar o número de substrings que o método extrai, remover espaços em branco das substrings e especificar se strings vazias (que ocorrem quando os delimitadores são adjacentes) são incluídas entre as strings retornadas.

Combinar cadeias de caracteres

Os seguintes String métodos podem ser usados para concatenação de cadeia de caracteres:

  • Concat Combina uma ou mais substrings numa só string.
  • Join Concatena uma ou mais substrings em um único elemento e adiciona um separador entre cada substring.

Formatar valores

O String.Format método usa o recurso de formatação composta para substituir um ou mais espaços reservados em uma cadeia de caracteres com a representação de cadeia de caracteres de algum objeto ou valor. O Format método é frequentemente usado para fazer o seguinte:

  • Para incorporar a representação em cadeia de um valor numérico numa cadeia de caracteres.
  • Para incorporar a representação de uma sequência de caracteres de um valor de data e hora numa sequência de caracteres.
  • Para incorporar a representação de cadeia de caracteres de um valor de enumeração numa string.
  • Para incorporar a representação de cadeia de caracteres de algum objeto que suporte a IFormattable interface numa cadeia de caracteres.
  • Para justificar à direita ou à esquerda uma subcadeia num campo dentro de uma string maior.

Para obter informações detalhadas sobre operações de formatação e exemplos, consulte o resumo de sobrecarga de Format.

Copiar uma cadeia de caracteres

Você pode chamar os seguintes String métodos para fazer uma cópia de uma cadeia de caracteres:

  • Clone Retorna uma referência a um objeto existente String .
  • CopyTo Copia uma parte de uma cadeia de caracteres para uma matriz de caracteres.

Normalizar uma cadeia de caracteres

Em Unicode, um único caractere pode ter vários pontos de código. A normalização converte esses caracteres equivalentes na mesma representação binária. O String.Normalize método executa a normalização e o String.IsNormalized método determina se uma cadeia de caracteres é normalizada.

Para obter mais informações e um exemplo, consulte a seção Normalização anteriormente neste artigo.

Construtores

Name Descrição
String(Char, Int32)

Inicializa uma nova instância da String classe ao valor indicado por um carácter Unicode especificado repetido um número especificado de vezes.

String(Char[], Int32, Int32)

Inicializa uma nova instância da String classe ao valor indicado por um array de caracteres Unicode, uma posição inicial do carácter dentro desse array e um comprimento.

String(Char[])

Inicializa uma nova instância da String classe para os caracteres Unicode indicados no array de caracteres especificado.

String(Char*, Int32, Int32)

Inicializa uma nova instância da String classe ao valor indicado por um ponteiro especificado para um array de caracteres Unicode, uma posição inicial do carácter dentro desse array e um comprimento.

String(Char*)

Inicializa uma nova instância da String classe ao valor indicado por um ponteiro especificado para um array de caracteres Unicode.

String(ReadOnlySpan<Char>)

Inicializa uma nova instância da String classe para os caracteres Unicode indicados no span de apenas leitura especificado.

String(SByte*, Int32, Int32, Encoding)

Inicializa uma nova instância da String classe ao valor indicado por um ponteiro especificado para um array de inteiros assinados de 8 bits, uma posição inicial dentro desse array, um comprimento e um Encoding objeto.

String(SByte*, Int32, Int32)

Inicializa uma nova instância da String classe ao valor indicado por um ponteiro especificado para um array de inteiros assinados de 8 bits, uma posição inicial dentro desse array e um comprimento.

String(SByte*)

Inicializa uma nova instância da String classe ao valor indicado por um ponteiro para um array de inteiros assinados de 8 bits.

Campos

Name Descrição
Empty

Representa a cadeia vazia. Este campo é só de leitura.

Propriedades

Name Descrição
Chars[Int32]

Coloca o Char objeto numa posição especificada no objeto atual String .

Length

Obtém o número de caracteres no objeto atual String .

Métodos

Name Descrição
Clone()

Devolve uma referência a esta instância de String.

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

Compara substrings de dois objetos especificados String , ignorando ou respeitando o seu caso e usando informação específica da cultura para influenciar a comparação, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.

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

Compara subcadeias de dois objetos especificados String , ignorando ou respeitando o seu caso, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.

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

Compara substrings de dois objetos especificados String usando as opções de comparação especificadas e informações específicas de cultura para influenciar a comparação, e retorna um inteiro que indica a relação das duas substrings entre si na ordem de ordenação.

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

Compara substrings de dois objetos especificados String usando as regras especificadas e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.

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

Compara subcadeias de dois objetos especificados String e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.

Compare(String, String, Boolean, CultureInfo)

Compara dois objetos especificados String , ignorando ou respeitando o seu caso, e usando informação específica da cultura para influenciar a comparação, e retorna um inteiro que indica a sua posição relativa na ordem de ordenação.

Compare(String, String, Boolean)

Compara dois objetos especificados String , ignorando ou respeitando o seu caso, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.

Compare(String, String, CultureInfo, CompareOptions)

Compara dois objetos especificados String usando as opções de comparação especificadas e informação específica da cultura para influenciar a comparação, e retorna um inteiro que indica a relação das duas cadeias entre si na ordem de ordenação.

Compare(String, String, StringComparison)

Compara dois objetos especificados String usando as regras especificadas e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.

Compare(String, String)

Compara dois objetos especificados String e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.

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

Compara substrings de dois objetos especificados String avaliando os valores numéricos dos objetos correspondentes Char em cada substring.

CompareOrdinal(String, String)

Compara dois objetos especificados String avaliando os valores numéricos dos objetos correspondentes Char em cada cadeia.

CompareTo(Object)

Compara esta instância com um especificado Object e indica se esta instância precede, segue ou aparece na mesma posição na ordem de ordenação que o especificado Object.

CompareTo(String)

Compara esta instância com um objeto especificado String e indica se esta instância precede, segue ou aparece na mesma posição na ordem de ordenação que a cadeia especificada.

Concat(IEnumerable<String>)

Concatena os membros de uma coleção construída IEnumerable<T> de tipo String.

Concat(Object, Object, Object, Object)

Concatena as representações das cadeias de quatro objetos especificados e quaisquer objetos especificados numa lista opcional de parâmetros de comprimento variável.

Concat(Object, Object, Object)

Concatena as representações das cadeias de três objetos especificados.

Concat(Object, Object)

Concatena as representações das cadeias de dois objetos especificados.

Concat(Object)

Cria a representação da cadeia de um objeto especificado.

Concat(Object[])

Concatena as representações das strings dos elementos num array especificado Object .

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

Concatena as representações das cadeias de quatro intervalos de caracteres especificados para apenas leitura.

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

Concatena as representações de cadeias de três intervalos de caracteres especificados de apenas leitura.

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

Concatena as representações das strings de dois intervalos de caracteres especificados de apenas leitura.

Concat(ReadOnlySpan<Object>)

Concatena as representações das cadeias dos elementos num intervalo especificado de objetos.

Concat(ReadOnlySpan<String>)

Concatena os elementos de um intervalo especificado de String.

Concat(String, String, String, String)

Concatena quatro instâncias especificadas de String.

Concat(String, String, String)

Concatena três instâncias especificadas de String.

Concat(String, String)

Concatena duas instâncias especificadas de String.

Concat(String[])

Concatena os elementos de um array especificado String .

Concat<T>(IEnumerable<T>)

Concatena os membros de uma IEnumerable<T> implementação.

Contains(Char, StringComparison)

Devolve um valor que indica se um carácter especificado ocorre dentro desta cadeia, usando as regras de comparação especificadas.

Contains(Char)

Devolve um valor que indica se um carácter especificado ocorre dentro desta cadeia.

Contains(Rune, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

Contains(Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

Contains(String, StringComparison)

Devolve um valor que indica se uma cadeia específica ocorre dentro dessa cadeia, usando as regras de comparação especificadas.

Contains(String)

Devolve um valor que indica se uma subcadeia especificada ocorre dentro dessa cadeia.

Copy(String)
Obsoleto.

Cria uma nova instância de String com o mesmo valor que um especificado String.

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

Copia um número especificado de caracteres de uma posição especificada neste caso para uma posição especificada num array de caracteres Unicode.

CopyTo(Span<Char>)

Copia o conteúdo desta cadeia para o intervalo de destino.

Create(IFormatProvider, DefaultInterpolatedStringHandler)

Cria uma nova cadeia usando o fornecedor especificado para controlar a formatação da cadeia interpolada especificada.

Create(IFormatProvider, Span<Char>, DefaultInterpolatedStringHandler)

Cria uma nova cadeia usando o fornecedor especificado para controlar a formatação da cadeia interpolada especificada.

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

Cria uma nova string com um comprimento específico e inicializa-a após a criação usando o callback especificado.

EndsWith(Char, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

EndsWith(Char)

Determina se o fim desta instância de string corresponde ao carácter especificado.

EndsWith(Rune, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

EndsWith(Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

EndsWith(String, Boolean, CultureInfo)

Determina se o final desta instância de cadeia corresponde à cadeia especificada quando comparado usando a cultura especificada.

EndsWith(String, StringComparison)

Determina se o final desta instância de cadeia corresponde à sequência especificada quando comparada usando a opção de comparação especificada.

EndsWith(String)

Determina se o final desta instância de cadeia corresponde à cadeia especificada.

EnumerateRunes()

Devolve uma enumeração de Rune desta cadeia.

Equals(Object)

Determina se esta instância e um objeto especificado, que também deve ser um String objeto, têm o mesmo valor.

Equals(String, String, StringComparison)

Determina se dois objetos especificados String têm o mesmo valor. Um parâmetro especifica a cultura, o caso e as regras de ordenação usadas na comparação.

Equals(String, String)

Determina se dois objetos especificados String têm o mesmo valor.

Equals(String, StringComparison)

Determina se esta cadeia e um objeto especificado String têm o mesmo valor. Um parâmetro especifica a cultura, o caso e as regras de ordenação usadas na comparação.

Equals(String)

Determina se esta instância e outro objeto especificado String têm o mesmo valor.

Format(IFormatProvider, CompositeFormat, Object[])

Substitui o item ou itens de formato em a CompositeFormat pela representação em cadeia dos objetos correspondentes no formato especificado.

Format(IFormatProvider, CompositeFormat, ReadOnlySpan<Object>)

Substitui o item ou itens de formato em a CompositeFormat pela representação em cadeia dos objetos correspondentes no formato especificado.

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

Substitui os itens de formato numa string pela representação string de três objetos especificados. Um parâmetro fornece informação de formatação específica para cada cultura.

Format(IFormatProvider, String, Object, Object)

Substitui os elementos de formato numa cadeia de caracteres pela representação de dois objetos especificados. Um parâmetro fornece informação de formatação específica para cada cultura.

Format(IFormatProvider, String, Object)

Substitui o item de formato ou itens numa cadeia específica pela representação em cadeia do objeto correspondente. Um parâmetro fornece informação de formatação específica para cada cultura.

Format(IFormatProvider, String, Object[])

Substitui os itens de formato numa string pelas representações de string dos objetos correspondentes num array especificado. Um parâmetro fornece informação de formatação específica para cada cultura.

Format(IFormatProvider, String, ReadOnlySpan<Object>)

Substitui os itens de formato numa cadeia de caracteres pelas representações de cadeias dos objetos correspondentes num intervalo especificado. Um parâmetro fornece informação de formatação específica para cada cultura.

Format(String, Object, Object, Object)

Substitui os itens de formato numa string pela representação string de três objetos especificados.

Format(String, Object, Object)

Substitui os elementos de formato numa cadeia de caracteres pela representação de dois objetos especificados.

Format(String, Object)

Substitui um ou mais itens de formato numa cadeia de caracteres pela representação de cadeias de um objeto especificado.

Format(String, Object[])

Substitui o item de formato numa string especificada pela representação string de um objeto correspondente num array especificado.

Format(String, ReadOnlySpan<Object>)

Substitui o item de formato numa string especificada pela representação string de um objeto correspondente num intervalo especificado.

Format<TArg0,TArg1,TArg2>(IFormatProvider, CompositeFormat, TArg0, TArg1, TArg2)

Substitui o item ou itens de formato em a CompositeFormat pela representação em cadeia dos objetos correspondentes no formato especificado.

Format<TArg0,TArg1>(IFormatProvider, CompositeFormat, TArg0, TArg1)

Substitui o item ou itens de formato em a CompositeFormat pela representação em cadeia dos objetos correspondentes no formato especificado.

Format<TArg0>(IFormatProvider, CompositeFormat, TArg0)

Substitui o item ou itens de formato em a CompositeFormat pela representação em cadeia dos objetos correspondentes no formato especificado.

GetEnumerator()

Recupera um objeto que pode iterar através dos caracteres individuais desta cadeia.

GetHashCode()

Devolve o código de hash desta cadeia.

GetHashCode(ReadOnlySpan<Char>, StringComparison)

Devolve o código hash para o espaço de caracteres de apenas leitura fornecido usando as regras especificadas.

GetHashCode(ReadOnlySpan<Char>)

Devolve o código de hash para o intervalo de caracteres apenas de leitura fornecido.

GetHashCode(StringComparison)

Devolve o código de hash desta cadeia usando as regras especificadas.

GetPinnableReference()

Devolve uma referência ao elemento da cadeia no índice zero.

Este método destina-se a suportar compiladores .NET e não deve ser chamado por código de utilizador.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetTypeCode()

Devolve-os TypeCode para a String aula.

IndexOf(Char, Int32, Int32, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

IndexOf(Char, Int32, Int32)

Reporta o índice baseado em zero da primeira ocorrência do carácter especificado nesta ocorrência. A pesquisa começa numa posição de carácter especificada e examina um número especificado de posições de caracteres.

IndexOf(Char, Int32, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

IndexOf(Char, Int32)

Reporta o índice baseado em zero da primeira ocorrência do carácter Unicode especificado nesta cadeia. A pesquisa começa numa posição de carácter especificada.

IndexOf(Char, StringComparison)

Reporta o índice baseado em zero da primeira ocorrência do carácter Unicode especificado nesta cadeia. Um parâmetro especifica o tipo de pesquisa a usar para o carácter especificado.

IndexOf(Char)

Reporta o índice baseado em zero da primeira ocorrência do carácter Unicode especificado nesta cadeia.

IndexOf(Rune, Int32, Int32, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

IndexOf(Rune, Int32, Int32)

Representa o texto como uma sequência de unidades de código UTF-16.

IndexOf(Rune, Int32, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

IndexOf(Rune, Int32)

Representa o texto como uma sequência de unidades de código UTF-16.

IndexOf(Rune, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

IndexOf(Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

IndexOf(String, Int32, Int32, StringComparison)

Reporta o índice baseado em zero da primeira ocorrência da cadeia especificada no objeto atual String . Os parâmetros especificam a posição inicial da pesquisa na cadeia atual, o número de caracteres na cadeia atual a pesquisar e o tipo de pesquisa a usar para a cadeia especificada.

IndexOf(String, Int32, Int32)

Reporta o índice baseado em zero da primeira ocorrência da cadeia especificada neste caso. A pesquisa começa numa posição de carácter especificada e examina um número especificado de posições de caracteres.

IndexOf(String, Int32, StringComparison)

Reporta o índice baseado em zero da primeira ocorrência da cadeia especificada no objeto atual String . Os parâmetros especificam a posição inicial da pesquisa na cadeia atual e o tipo de pesquisa a usar para a cadeia especificada.

IndexOf(String, Int32)

Reporta o índice baseado em zero da primeira ocorrência da cadeia especificada neste caso. A pesquisa começa numa posição de carácter especificada.

IndexOf(String, StringComparison)

Reporta o índice baseado em zero da primeira ocorrência da cadeia especificada no objeto atual String . Um parâmetro especifica o tipo de pesquisa a usar para a cadeia especificada.

IndexOf(String)

Reporta o índice baseado em zero da primeira ocorrência da cadeia especificada neste caso.

IndexOfAny(Char[], Int32, Int32)

Reporta o índice baseado em zero da primeira ocorrência nesta instância de qualquer carácter num array especificado de caracteres Unicode. A pesquisa começa numa posição de carácter especificada e examina um número especificado de posições de caracteres.

IndexOfAny(Char[], Int32)

Reporta o índice baseado em zero da primeira ocorrência nesta instância de qualquer carácter num array especificado de caracteres Unicode. A pesquisa começa numa posição de carácter especificada.

IndexOfAny(Char[])

Reporta o índice baseado em zero da primeira ocorrência nesta instância de qualquer carácter num array especificado de caracteres Unicode.

Insert(Int32, String)

Devolve uma nova cadeia na qual uma cadeia especificada é inserida numa posição de índice especificada neste caso.

Intern(String)

Recupera a referência do sistema ao especificado String.

IsInterned(String)

Recupera uma referência a um determinado String.

IsNormalized()

Indica se esta cadeia pertence à forma C de normalização Unicode.

IsNormalized(NormalizationForm)

Indica se esta cadeia está na forma de normalização Unicode especificada.

IsNullOrEmpty(String)

Indica se a cadeia especificada é null ou uma cadeia vazia ("").

IsNullOrWhiteSpace(String)

Indica se uma cadeia especificada é null, vazia, ou consiste apenas em caracteres de espaço em branco.

Join(Char, Object[])

Concatena as representações das cadeias de um array de objetos, usando o separador especificado entre cada membro.

Join(Char, ReadOnlySpan<Object>)

Concatena as representações das strings de um intervalo de objetos, usando o separador especificado entre cada membro.

Join(Char, ReadOnlySpan<String>)

Concatena um intervalo de cadeias, usando o separador especificado entre cada membro.

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

Concatena um array de cadeias, usando o separador especificado entre cada membro, começando pelo elemento localizado value na startIndex posição e concatenando até count elementos.

Join(Char, String[])

Concatena um array de cadeias, usando o separador especificado entre cada membro.

Join(String, IEnumerable<String>)

Concatena os membros de uma coleção construída IEnumerable<T> do tipo String, usando o separador especificado entre cada membro.

Join(String, Object[])

Concatena os elementos de um array de objetos, usando o separador especificado entre cada elemento.

Join(String, ReadOnlySpan<Object>)

Concatena as representações das strings de um intervalo de objetos, usando o separador especificado entre cada membro.

Join(String, ReadOnlySpan<String>)

Concatena um intervalo de cadeias, usando o separador especificado entre cada membro.

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

Concatena os elementos especificados de um array de strings, usando o separador especificado entre cada elemento.

Join(String, String[])

Concatena todos os elementos de um array de cadeias, usando o separador especificado entre cada elemento.

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

Concatena os membros de uma coleção, usando o separador especificado entre cada membro.

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

Concatena os membros de uma coleção, usando o separador especificado entre cada membro.

LastIndexOf(Char, Int32, Int32, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(Char, Int32, Int32)

Reporta a posição de índice baseada em zero da última ocorrência do carácter Unicode especificado numa substring dentro desta instância. A pesquisa começa numa posição de carácter especificada e avança para trás em direção ao início da cadeia para um número especificado de posições de caracteres.

LastIndexOf(Char, Int32, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(Char, Int32)

Reporta a posição de índice baseada em zero da última ocorrência de um carácter Unicode especificado nesta instância. A pesquisa começa numa posição especificada de carácter e avança para trás em direção ao início da sequência.

LastIndexOf(Char, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(Char)

Reporta a posição de índice baseada em zero da última ocorrência de um carácter Unicode especificado nesta instância.

LastIndexOf(Rune, Int32, Int32, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(Rune, Int32, Int32)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(Rune, Int32, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(Rune, Int32)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(Rune, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

LastIndexOf(String, Int32, Int32, StringComparison)

Reporta a posição de índice baseada em zero da última ocorrência de uma cadeia especificada nesta instância. A pesquisa começa numa posição de carácter especificada e avança para trás em direção ao início da cadeia para o número especificado de posições de caracteres. Um parâmetro especifica o tipo de comparação a realizar ao procurar a cadeia especificada.

LastIndexOf(String, Int32, Int32)

Reporta a posição de índice baseada em zero da última ocorrência de uma cadeia especificada nesta instância. A pesquisa começa numa posição de carácter especificada e avança para trás em direção ao início da cadeia para um número especificado de posições de caracteres.

LastIndexOf(String, Int32, StringComparison)

Reporta o índice baseado em zero da última ocorrência de uma cadeia especificada dentro do objeto atual String . A pesquisa começa numa posição especificada de carácter e avança para trás em direção ao início da sequência. Um parâmetro especifica o tipo de comparação a realizar ao procurar a cadeia especificada.

LastIndexOf(String, Int32)

Reporta a posição de índice baseada em zero da última ocorrência de uma cadeia especificada nesta instância. A pesquisa começa numa posição especificada de carácter e avança para trás em direção ao início da sequência.

LastIndexOf(String, StringComparison)

Reporta o índice baseado em zero da última ocorrência de uma cadeia especificada dentro do objeto atual String . Um parâmetro especifica o tipo de pesquisa a usar para a cadeia especificada.

LastIndexOf(String)

Reporta a posição de índice baseada em zero da última ocorrência de uma cadeia especificada nesta instância.

LastIndexOfAny(Char[], Int32, Int32)

Reporta a posição de índice baseada em zero da última ocorrência neste caso de um ou mais caracteres especificados num array Unicode. A pesquisa começa numa posição de carácter especificada e avança para trás em direção ao início da cadeia para um número especificado de posições de caracteres.

LastIndexOfAny(Char[], Int32)

Reporta a posição de índice baseada em zero da última ocorrência neste caso de um ou mais caracteres especificados num array Unicode. A pesquisa começa numa posição especificada de carácter e avança para trás em direção ao início da sequência.

LastIndexOfAny(Char[])

Reporta a posição de índice baseada em zero da última ocorrência neste caso de um ou mais caracteres especificados num array Unicode.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
Normalize()

Devolve uma nova cadeia cujo valor textual é o mesmo que essa cadeia, mas cuja representação binária está na forma de normalização Unicode C.

Normalize(NormalizationForm)

Devolve uma nova cadeia cujo valor textual é o mesmo que essa cadeia, mas cuja representação binária está na forma especificada de normalização Unicode.

PadLeft(Int32, Char)

Devolve uma nova cadeia que alinha os caracteres à direita neste caso, preenchendo-os à esquerda com um carácter Unicode especificado, para um comprimento total especificado.

PadLeft(Int32)

Devolve uma nova cadeia que alinha os caracteres à direita neste caso, preenchendo-os com espaços à esquerda, para um comprimento total especificado.

PadRight(Int32, Char)

Devolve uma nova cadeia que alinha à esquerda os caracteres dessa cadeia, preenchendo-os à direita com um carácter Unicode especificado, para um comprimento total especificado.

PadRight(Int32)

Devolve uma nova cadeia que alinha à esquerda os caracteres dessa cadeia, preenchendo-os com espaços à direita, para um comprimento total especificado.

Remove(Int32, Int32)

Devolve uma nova cadeia em que um número especificado de caracteres na instância atual a partir de uma posição determinada foi eliminado.

Remove(Int32)

Devolve uma nova cadeia em que todos os caracteres da instância atual, começando numa posição especificada e continuando até à última posição, foram eliminados.

Replace(Char, Char)

Devolve uma nova cadeia em que todas as ocorrências de um carácter Unicode especificado neste caso são substituídas por outro carácter Unicode especificado.

Replace(Rune, Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

Replace(String, String, Boolean, CultureInfo)

Devolve uma nova cadeia em que todas as ocorrências de uma cadeia especificada na instância atual são substituídas por outra cadeia especificada, usando a cultura e a sensibilidade a maiúsculas e minúsculas fornecidas.

Replace(String, String, StringComparison)

Devolve uma nova cadeia em que todas as ocorrências de uma cadeia especificada na instância atual são substituídas por outra cadeia especificada, usando o tipo de comparação fornecido.

Replace(String, String)

Devolve uma nova cadeia em que todas as ocorrências de uma cadeia especificada na instância atual são substituídas por outra cadeia especificada.

ReplaceLineEndings()

Substitui todas as sequências de nova linha na cadeia atual por NewLine.

ReplaceLineEndings(String)

Substitui todas as sequências de nova linha na cadeia atual por replacementText.

Split(Char, Int32, StringSplitOptions)

Divide uma cadeia num número máximo de subcadeias com base no separador de caracteres fornecido, omitindo opcionalmente subcadeias vazias do resultado.

Split(Char, StringSplitOptions)

Divide uma cadeia em subcadeias com base num carácter delimitador especificado e, opcionalmente, em opções.

Split(Char[], Int32, StringSplitOptions)

Divide uma cadeia num número máximo de subcadeias com base em caracteres delimitadores especificados e, opcionalmente, opções.

Split(Char[], Int32)

Divide uma cadeia num número máximo de subcadeias com base em caracteres delimitadores especificados.

Split(Char[], StringSplitOptions)

Divide uma cadeia em substrings com base em caracteres e opções delimitadoras especificados.

Split(Char[])

Divide uma cadeia em subcadeias com base em caracteres delimitadores especificados.

Split(ReadOnlySpan<Char>)

Divide uma cadeia em subcadeias com base em caracteres delimitadores especificados.

Split(Rune, Int32, StringSplitOptions)

Representa o texto como uma sequência de unidades de código UTF-16.

Split(Rune, StringSplitOptions)

Representa o texto como uma sequência de unidades de código UTF-16.

Split(String, Int32, StringSplitOptions)

Divide uma cadeia num número máximo de subcadeias com base numa cadeia delimitadora especificada e, opcionalmente, opções.

Split(String, StringSplitOptions)

Divide uma cadeia em subcadeias que se baseiam no separador de cordas fornecido.

Split(String[], Int32, StringSplitOptions)

Divide uma cadeia num número máximo de subcadeias com base em cadeias delimitadoras especificadas e, opcionalmente, opções.

Split(String[], StringSplitOptions)

Divide uma cadeia em subcadeias com base numa cadeia delimitadora especificada e, opcionalmente, opções.

StartsWith(Char, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

StartsWith(Char)

Determina se esta instância de cadeia começa com o carácter especificado.

StartsWith(Rune, StringComparison)

Representa o texto como uma sequência de unidades de código UTF-16.

StartsWith(Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

StartsWith(String, Boolean, CultureInfo)

Determina se o início desta instância de string corresponde à string especificada quando comparado usando a cultura especificada.

StartsWith(String, StringComparison)

Determina se o início desta instância de string corresponde à string especificada quando comparada usando a opção de comparação especificada.

StartsWith(String)

Determina se o início desta instância de cadeia corresponde à cadeia especificada.

Substring(Int32, Int32)

Recupera uma substring desta instância. A subcadeia começa numa posição de carácter especificada e tem um comprimento especificado.

Substring(Int32)

Recupera uma substring desta instância. A subcadeia começa numa posição especificada de carácter e continua até ao fim da cadeia.

ToCharArray()

Copia os caracteres neste caso para um array de caracteres Unicode.

ToCharArray(Int32, Int32)

Copia os caracteres de uma substring especificada neste caso para um array de caracteres Unicode.

ToLower()

Devolve uma cópia desta cadeia convertida para minúscula.

ToLower(CultureInfo)

Devolve uma cópia desta cadeia convertida para minúsculas, usando as regras de carcaça da cultura especificada.

ToLowerInvariant()

Devolve uma cópia deste String objeto convertida para minúsculas usando as regras de carcaça da cultura invariante.

ToString()

Devolve esta instância de String; não é realizada nenhuma conversão real.

ToString(IFormatProvider)

Devolve esta instância de String; não é realizada nenhuma conversão real.

ToUpper()

Devolve uma cópia desta cadeia convertida para maiúsculas.

ToUpper(CultureInfo)

Retorna uma cópia desta cadeia convertida para maiúsculas, usando as regras de carcaça da cultura especificada.

ToUpperInvariant()

Devolve uma cópia deste String objeto convertida para maiúsculas usando as regras de carcaça da cultura invariante.

Trim()

Remove todos os caracteres de espaço em branco à frente e à frente da cadeia atual.

Trim(Char)

Remove todas as instâncias iniciais e finais de um carácter da cadeia atual.

Trim(Char[])

Remove todas as ocorrências iniciais e finais de um conjunto de caracteres especificados num array da cadeia atual.

Trim(Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

TrimEnd()

Remove todos os caracteres de espaço em branco finais da cadeia atual.

TrimEnd(Char)

Remove todas as ocorrências finais de um carácter da cadeia atual.

TrimEnd(Char[])

Remove todas as ocorrências finais de um conjunto de caracteres especificados num array da cadeia atual.

TrimEnd(Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

TrimStart()

Remove todos os caracteres de espaço em branco iniciais da cadeia atual.

TrimStart(Char)

Remove todas as ocorrências iniciais de um carácter especificado da cadeia atual.

TrimStart(Char[])

Remove todas as ocorrências iniciais de um conjunto de caracteres especificados num array da cadeia corrente.

TrimStart(Rune)

Representa o texto como uma sequência de unidades de código UTF-16.

TryCopyTo(Span<Char>)

Copia o conteúdo desta cadeia para o intervalo de destino.

Operadores

Name Descrição
Equality(String, String)

Determina se duas cadeias especificadas têm o mesmo valor.

Implicit(String to ReadOnlySpan<Char>)

Define uma conversão implícita de uma dada cadeia para um espaço de caracteres apenas de leitura.

Inequality(String, String)

Determina se duas cadeias especificadas têm valores diferentes.

Implementações de Interface Explícita

Name Descrição
IComparable.CompareTo(Object)

Compara esta instância com um especificado Object e indica se esta instância precede, segue ou aparece na mesma posição na ordem de ordenação que o especificado Object.

IConvertible.GetTypeCode()

Devolve-os TypeCode para a String aula.

IConvertible.ToBoolean(IFormatProvider)

Para uma descrição deste elemento, veja ToBoolean(IFormatProvider).

IConvertible.ToByte(IFormatProvider)

Para uma descrição deste elemento, veja ToByte(IFormatProvider).

IConvertible.ToChar(IFormatProvider)

Para uma descrição deste elemento, veja ToChar(IFormatProvider).

IConvertible.ToDateTime(IFormatProvider)

Para uma descrição deste elemento, veja ToDateTime(IFormatProvider).

IConvertible.ToDecimal(IFormatProvider)

Para uma descrição deste elemento, veja ToDecimal(IFormatProvider).

IConvertible.ToDouble(IFormatProvider)

Para uma descrição deste elemento, veja ToDouble(IFormatProvider).

IConvertible.ToInt16(IFormatProvider)

Para uma descrição deste elemento, veja ToInt16(IFormatProvider).

IConvertible.ToInt32(IFormatProvider)

Para uma descrição deste elemento, veja ToInt32(IFormatProvider).

IConvertible.ToInt64(IFormatProvider)

Para uma descrição deste elemento, veja ToInt64(IFormatProvider).

IConvertible.ToSByte(IFormatProvider)

Para uma descrição deste elemento, veja ToSByte(IFormatProvider).

IConvertible.ToSingle(IFormatProvider)

Para uma descrição deste elemento, veja ToSingle(IFormatProvider).

IConvertible.ToString(IFormatProvider)

Para uma descrição deste elemento, veja ToString(IFormatProvider).

IConvertible.ToType(Type, IFormatProvider)

Para uma descrição deste elemento, veja ToType(Type, IFormatProvider).

IConvertible.ToUInt16(IFormatProvider)

Para uma descrição deste elemento, veja ToUInt16(IFormatProvider).

IConvertible.ToUInt32(IFormatProvider)

Para uma descrição deste elemento, veja ToUInt32(IFormatProvider).

IConvertible.ToUInt64(IFormatProvider)

Para uma descrição deste elemento, veja ToUInt64(IFormatProvider).

IEnumerable.GetEnumerator()

Devolve um enumerador que itera através do objeto atual String .

IEnumerable<Char>.GetEnumerator()

Devolve um enumerador que itera através do objeto atual String .

IParsable<String>.Parse(String, IFormatProvider)

Transforma uma cadeia num valor.

IParsable<String>.TryParse(String, IFormatProvider, String)

Representa o texto como uma sequência de unidades de código UTF-16.

ISpanParsable<String>.Parse(ReadOnlySpan<Char>, IFormatProvider)

Divide um intervalo de caracteres num valor.

ISpanParsable<String>.TryParse(ReadOnlySpan<Char>, IFormatProvider, String)

Representa o texto como uma sequência de unidades de código UTF-16.

Métodos da Extensão

Name Descrição
Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)

Aplica uma função acumuladora sobre uma sequência. O valor semente especificado é usado como valor inicial do acumulador, e a função especificada é usada para selecionar o valor do resultado.

Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)

Aplica uma função acumuladora sobre uma sequência. O valor semente especificado é usado como valor inicial do acumulador.

Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)

Aplica uma função acumuladora sobre uma sequência.

AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TKey,TAccumulate>, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>)

Aplica uma função acumuladora sobre uma sequência, agrupando os resultados por chave.

AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>)

Aplica uma função acumuladora sobre uma sequência, agrupando os resultados por chave.

All<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Determina se todos os elementos de uma sequência satisfazem uma condição.

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

Devolve uma coleção filtrada de elementos que contém os antepassados de cada nó na coleção fonte. Apenas os elementos que têm correspondência XName são incluídos na coleção.

Ancestors<T>(IEnumerable<T>)

Devolve uma coleção de elementos que contém os antepassados de cada nó na coleção de código-fonte.

Any<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Determina se algum elemento de uma sequência satisfaz uma condição.

Any<TSource>(IEnumerable<TSource>)

Determina se uma sequência contém algum elemento.

Append<TSource>(IEnumerable<TSource>, TSource)

Acrescenta um valor ao final da sequência.

AsEnumerable<TSource>(IEnumerable<TSource>)

Retorna a entrada digitada como IEnumerable<T>.

AsMemory(String, Index)

Cria uma nova ReadOnlyMemory<Char> sobre uma porção da cadeia alvo começando num índice especificado.

AsMemory(String, Int32, Int32)

Cria um novo ReadOnlyMemory<Char> sobre uma porção da corda alvo começando numa posição especificada com um comprimento.

AsMemory(String, Int32)

Cria uma nova ReadOnlyMemory<Char> sobre uma porção da cadeia de destino a partir de uma posição de carácter especificada.

AsMemory(String, Range)

Cria um novo ReadOnlyMemory<Char> ao longo de um intervalo especificado da cadeia alvo.

AsMemory(String)

Cria um novo ReadOnlyMemory<Char> sobre a parte da corda alvo.

AsParallel(IEnumerable)

Permite a paralelização de uma consulta.

AsParallel<TSource>(IEnumerable<TSource>)

Permite a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable para um IQueryable.

AsQueryable<TElement>(IEnumerable<TElement>)

Converte um genérico IEnumerable<T> num genérico IQueryable<T>.

AsSpan(String, Index)

Cria uma nova ReadOnlySpan<T> sobre uma porção da corda alvo desde uma posição especificada até ao fim da corda.

AsSpan(String, Int32, Int32)

Cria um novo intervalo de apenas leitura sobre uma porção da cadeia de destino a partir de uma posição especificada para um número determinado de caracteres.

AsSpan(String, Int32)

Cria um novo intervalo só de leitura sobre uma porção da cadeia alvo desde uma posição especificada até ao fim da cadeia.

AsSpan(String, Range)

Cria um novo ReadOnlySpan<T> sobre uma porção de uma cadeia alvo usando os índices de início e fim da distância.

AsSpan(String)

Cria um novo intervalo de apenas leitura sobre uma cadeia.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>)

Calcula a média de uma sequência de Decimal valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Double>)

Calcula a média de uma sequência de Double valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Int32>)

Calcula a média de uma sequência de Int32 valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Int64>)

Calcula a média de uma sequência de Int64 valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>)

Calcula a média de uma sequência de valores anuláveis Decimal que são obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>)

Calcula a média de uma sequência de valores anuláveis Double que são obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>)

Calcula a média de uma sequência de valores anuláveis Int32 que são obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>)

Calcula a média de uma sequência de valores anuláveis Int64 que são obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>)

Calcula a média de uma sequência de valores anuláveis Single que são obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Average<TSource>(IEnumerable<TSource>, Func<TSource,Single>)

Calcula a média de uma sequência de Single valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Cast<TResult>(IEnumerable)

Conjura os elementos de an IEnumerable para o tipo especificado.

Chunk<TSource>(IEnumerable<TSource>, Int32)

Divide os elementos de uma sequência em blocos de tamanho no máximo size.

Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Concatena duas sequências.

Contains<TSource>(IEnumerable<TSource>, TSource, IEqualityComparer<TSource>)

Determina se uma sequência contém um elemento especificado usando um .IEqualityComparer<T>

Contains<TSource>(IEnumerable<TSource>, TSource)

Determina se uma sequência contém um elemento especificado usando o comparador de igualdade padrão.

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

Copia DataRow objetos para o especificado DataTable, dado um objeto de entrada IEnumerable<T> onde o parâmetro T genérico é DataRow.

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

Copia DataRow objetos para o especificado DataTable, dado um objeto de entrada IEnumerable<T> onde o parâmetro T genérico é DataRow.

CopyToDataTable<T>(IEnumerable<T>)

Devolve a DataTable que contém cópias dos DataRow objetos, dado um objeto de entrada IEnumerable<T> onde o parâmetro T genérico é DataRow.

Count<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve um número que representa quantos elementos na sequência especificada satisfazem uma condição.

Count<TSource>(IEnumerable<TSource>)

Devolve o número de elementos numa sequência.

CountBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Devolve a contagem de elementos na sequência de origem agrupados por chave.

DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource)

Devolve os elementos da sequência especificada ou o valor especificado numa coleção singleton se a sequência estiver vazia.

DefaultIfEmpty<TSource>(IEnumerable<TSource>)

Devolve os elementos da sequência especificada ou o valor padrão do parâmetro de tipo numa coleção singleton se a sequência estiver vazia.

DescendantNodes<T>(IEnumerable<T>)

Devolve uma coleção dos nós descendentes de cada documento e elemento da coleção de origem.

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

Devolve uma coleção filtrada de elementos que contém os elementos descendentes de cada elemento e documento da coleção de origem. Apenas os elementos que têm correspondência XName são incluídos na coleção.

Descendants<T>(IEnumerable<T>)

Devolve uma coleção de elementos que contém os elementos descendentes de cada elemento e documento da coleção fonte.

Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>)

Devolve elementos distintos de uma sequência usando um especificado IEqualityComparer<T> para comparar valores.

Distinct<TSource>(IEnumerable<TSource>)

Devolve elementos distintos de uma sequência usando o comparador de igualdade padrão para comparar valores.

DistinctBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Devolve elementos distintos de uma sequência de acordo com uma função seletora de teclas especificada e usando um comparador especificado para comparar chaves.

DistinctBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Devolve elementos distintos de uma sequência de acordo com uma função seletora de teclas especificada.

ElementAt<TSource>(IEnumerable<TSource>, Index)

Devolve o elemento num índice especificado numa sequência.

ElementAt<TSource>(IEnumerable<TSource>, Int32)

Devolve o elemento num índice especificado numa sequência.

ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index)

Devolve o elemento num índice especificado numa sequência ou um valor padrão se o índice estiver fora do intervalo.

ElementAtOrDefault<TSource>(IEnumerable<TSource>, Int32)

Devolve o elemento num índice especificado numa sequência ou um valor padrão se o índice estiver fora do intervalo.

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

Devolve uma coleção filtrada dos elementos filhos de cada elemento e documento da coleção de origem. Apenas os elementos que têm correspondência XName são incluídos na coleção.

Elements<T>(IEnumerable<T>)

Devolve uma coleção dos elementos filhos de cada elemento e documento da coleção de origem.

Except<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Produz a diferença de conjuntos de duas sequências usando o especificado IEqualityComparer<T> para comparar valores.

Except<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Produz a diferença de conjuntos de duas sequências usando o comparador de igualdade por defeito para comparar valores.

ExceptBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Produz a diferença de conjuntos de duas sequências de acordo com uma função seletora de teclas especificada.

ExceptBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>)

Produz a diferença de conjuntos de duas sequências de acordo com uma função seletora de teclas especificada.

First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve o primeiro elemento numa sequência que satisfaz uma condição especificada.

First<TSource>(IEnumerable<TSource>)

Devolve o primeiro elemento de uma sequência.

FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)

Devolve o primeiro elemento da sequência que satisfaz uma condição, ou um valor padrão especificado se tal elemento não for encontrado.

FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve o primeiro elemento da sequência que satisfaz uma condição ou um valor padrão se tal elemento não for encontrado.

FirstOrDefault<TSource>(IEnumerable<TSource>, TSource)

Devolve o primeiro elemento de uma sequência, ou um valor padrão especificado se a sequência não contiver elementos.

FirstOrDefault<TSource>(IEnumerable<TSource>)

Devolve o primeiro elemento de uma sequência, ou um valor padrão se a sequência não contiver elementos.

FullJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>)

Representa o texto como uma sequência de unidades de código UTF-16.

FullJoin<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>)

Representa o texto como uma sequência de unidades de código UTF-16.

GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>)

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. Os valores-chave são comparados usando um comparador especificado, e os elementos de cada grupo são projetados usando uma função especificada.

GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. Os elementos de cada grupo são projetados usando uma função especificada.

GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Agrupa os elementos de uma sequência de acordo com uma função seletora de tecla. As chaves são comparadas usando um comparador e os elementos de cada grupo são projetados usando uma função especificada.

GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e projeta os elementos para cada grupo usando uma função especificada.

GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. As chaves são comparadas usando um comparador especificado.

GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave.

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e compara as chaves usando um comparador especificado.

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)

Correlaciona os elementos de duas sequências com base na igualdade de chave e agrupa os resultados. Um especificado IEqualityComparer<T> é usado para comparar tonalidades.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)

Correlaciona os elementos de duas sequências com base na igualdade das chaves e agrupa os resultados. O comparador de igualdade por defeito é usado para comparar chaves.

GroupJoin<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>)

Representa o texto como uma sequência de unidades de código UTF-16.

Index<TSource>(IEnumerable<TSource>)

Devolve um enumerável que incorpora o índice do elemento numa tupla.

InDocumentOrder<T>(IEnumerable<T>)

Devolve uma coleção de nós que contém todos os nós da coleção de código-fonte, ordenados pela ordem dos documentos.

Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Produz a interseção conjunta de duas sequências usando o especificado IEqualityComparer<T> para comparar valores.

Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Produz a interseção conjunta de duas sequências usando o comparador de igualdade padrão para comparar valores.

IntersectBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Produz a interseção conjunta de duas sequências de acordo com uma função seletora de teclas especificada.

IntersectBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TKey>, Func<TSource,TKey>)

Produz a interseção conjunta de duas sequências de acordo com uma função seletora de teclas especificada.

IsNormalized(String, NormalizationForm)

Indica se uma cadeia está numa forma de normalização Unicode especificada.

IsNormalized(String)

Indica se a cadeia especificada pertence à forma C de normalização Unicode.

Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>)

Correlaciona os elementos de duas sequências com base nas chaves correspondentes. Um especificado IEqualityComparer<T> é usado para comparar tonalidades.

Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>)

Correlaciona os elementos de duas sequências com base nas chaves correspondentes. O comparador de igualdade por defeito é usado para comparar chaves.

Join<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>)

Representa o texto como uma sequência de unidades de código UTF-16.

Last<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve o último elemento de uma sequência que satisfaz uma condição especificada.

Last<TSource>(IEnumerable<TSource>)

Devolve o último elemento de uma sequência.

LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)

Devolve o último elemento de uma sequência que satisfaz uma condição, ou um valor padrão especificado se tal elemento não for encontrado.

LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve o último elemento de uma sequência que satisfaz uma condição ou um valor padrão se tal elemento não for encontrado.

LastOrDefault<TSource>(IEnumerable<TSource>, TSource)

Devolve o último elemento de uma sequência, ou um valor padrão especificado se a sequência não contiver elementos.

LastOrDefault<TSource>(IEnumerable<TSource>)

Devolve o último elemento de uma sequência, ou um valor padrão se a sequência não contiver elementos.

LeftJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>)

Correlaciona os elementos de duas sequências com base nas chaves correspondentes. Um especificado IEqualityComparer<T> é usado para comparar tonalidades.

LeftJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>)

Correlaciona os elementos de duas sequências com base nas chaves correspondentes. O comparador de igualdade por defeito é usado para comparar chaves.

LeftJoin<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>)

Representa o texto como uma sequência de unidades de código UTF-16.

LongCount<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve e Int64 que representa quantos elementos numa sequência satisfazem uma condição.

LongCount<TSource>(IEnumerable<TSource>)

Retorna e Int64 que representa o número total de elementos numa sequência.

Max<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Invoca uma função de transformação em cada elemento de uma sequência genérica e devolve o valor máximo resultante.

Max<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo Decimal .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Double>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo Double .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Int32>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo Int32 .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Int64>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo Int64 .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo anulável Decimal .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo anulável Double .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo anulável Int32 .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo anulável Int64 .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo anulável Single .

Max<TSource>(IEnumerable<TSource>, Func<TSource,Single>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor máximo Single .

Max<TSource>(IEnumerable<TSource>, IComparer<TSource>)

Devolve o valor máximo numa sequência genérica.

Max<TSource>(IEnumerable<TSource>)

Devolve o valor máximo numa sequência genérica.

MaxBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Devolve o valor máximo numa sequência genérica de acordo com uma função seletora de teclas e comparador de chaves especificadas.

MaxBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Devolve o valor máximo numa sequência genérica de acordo com uma função seletora de teclas especificada.

Min<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Invoca uma função de transformação em cada elemento de uma sequência genérica e devolve o valor mínimo resultante.

Min<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo Decimal .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Double>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo Double .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Int32>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo Int32 .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Int64>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo Int64 .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo anulável Decimal .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo anulável Double .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo anulável Int32 .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo anulável Int64 .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo anulável Single .

Min<TSource>(IEnumerable<TSource>, Func<TSource,Single>)

Invoca uma função de transformação em cada elemento de uma sequência e devolve o valor mínimo Single .

Min<TSource>(IEnumerable<TSource>, IComparer<TSource>)

Devolve o valor mínimo numa sequência genérica.

Min<TSource>(IEnumerable<TSource>)

Devolve o valor mínimo numa sequência genérica.

MinBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Devolve o valor mínimo numa sequência genérica de acordo com uma função seletora de teclas e comparador de chaves especificadas.

MinBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Devolve o valor mínimo numa sequência genérica de acordo com uma função seletora de teclas especificada.

Nodes<T>(IEnumerable<T>)

Devolve uma coleção dos nós filhos de cada documento e elemento da coleção de código-fonte.

Normalize(String, NormalizationForm)

Normaliza uma cadeia para a forma de normalização Unicode especificada.

Normalize(String)

Normaliza uma cadeia para uma forma de normalização Unicode C.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base num tipo especificado.

Order<T>(IEnumerable<T>, IComparer<T>)

Ordena os elementos de uma sequência por ordem crescente.

Order<T>(IEnumerable<T>)

Ordena os elementos de uma sequência por ordem crescente.

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Ordena os elementos de uma sequência por ordem crescente usando um comparador especificado.

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Ordena os elementos de uma sequência por ordem crescente de acordo com uma chave.

OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Ordena os elementos de uma sequência por ordem decrescente usando um comparador especificado.

OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Ordena os elementos de uma sequência por ordem decrescente de acordo com uma chave.

OrderDescending<T>(IEnumerable<T>, IComparer<T>)

Ordena os elementos de uma sequência por ordem decrescente.

OrderDescending<T>(IEnumerable<T>)

Ordena os elementos de uma sequência por ordem decrescente.

Prepend<TSource>(IEnumerable<TSource>, TSource)

Acrescenta um valor ao início da sequência.

Remove<T>(IEnumerable<T>)

Remove todos os nós da coleção de origem do seu nó pai.

Reverse<TSource>(IEnumerable<TSource>)

Inverte a ordem dos elementos numa sequência.

RightJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>)

Correlaciona os elementos de duas sequências com base nas chaves correspondentes. Um especificado IEqualityComparer<T> é usado para comparar tonalidades.

RightJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>)

Correlaciona os elementos de duas sequências com base nas chaves correspondentes. O comparador de igualdade por defeito é usado para comparar chaves.

RightJoin<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>)

Representa o texto como uma sequência de unidades de código UTF-16.

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>)

Projeta cada elemento de uma sequência numa nova forma incorporando o índice do elemento.

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Projeta cada elemento de uma sequência numa nova forma.

SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)

Projeta cada elemento de uma sequência para um IEnumerable<T>, achata as sequências resultantes numa sequência e invoca uma função seletora de resultados em cada elemento nelas.

SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)

Projeta cada elemento de uma sequência para um IEnumerable<T>, achata as sequências resultantes numa sequência e invoca uma função seletora de resultados em cada elemento nelas. O índice de cada elemento fonte é usado na forma intermédia projetada desse elemento.

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>)

Projeta cada elemento de uma sequência para um IEnumerable<T> e achata as sequências resultantes numa sequência.

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>)

Projeta cada elemento de uma sequência para um IEnumerable<T>, e achata as sequências resultantes numa só sequência. O índice de cada elemento fonte é usado na forma projetada desse elemento.

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Determina se duas sequências são iguais comparando os seus elementos usando um especificado IEqualityComparer<T>.

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Determina se duas sequências são iguais comparando os elementos usando o comparador de igualdade padrão para o seu tipo.

Shuffle<TSource>(IEnumerable<TSource>)

Baralha a ordem dos elementos de uma sequência.

Single<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve o único elemento de uma sequência que satisfaz uma condição especificada, e lança uma exceção se existirem mais do que um desses elementos.

Single<TSource>(IEnumerable<TSource>)

Devolve o único elemento de uma sequência e lança uma exceção se não houver exatamente um elemento na sequência.

SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)

Devolve o único elemento de uma sequência que satisfaz uma condição especificada, ou um valor padrão especificado se tal elemento não existir; este método lança uma exceção se mais do que um elemento satisfizerem a condição.

SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve o único elemento de uma sequência que satisfaz uma condição especificada ou um valor padrão se tal elemento não existir; este método lança uma exceção se mais do que um elemento satisfizerem a condição.

SingleOrDefault<TSource>(IEnumerable<TSource>, TSource)

Devolve o único elemento de uma sequência, ou um valor padrão especificado se a sequência estiver vazia; este método lança uma exceção se houver mais do que um elemento na sequência.

SingleOrDefault<TSource>(IEnumerable<TSource>)

Devolve o único elemento de uma sequência, ou um valor padrão se a sequência estiver vazia; este método lança uma exceção se houver mais do que um elemento na sequência.

Skip<TSource>(IEnumerable<TSource>, Int32)

Ignora um número especificado de elementos numa sequência e depois devolve os elementos restantes.

SkipLast<TSource>(IEnumerable<TSource>, Int32)

Devolve uma nova coleção enumerável que contém os elementos de source com os últimos count elementos da coleção fonte omitidos.

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Ignora elementos numa sequência desde que uma condição especificada seja verdadeira e depois devolve os elementos restantes.

SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)

Ignora elementos numa sequência desde que uma condição especificada seja verdadeira e depois devolve os elementos restantes. O índice do elemento é usado na lógica da função de predicado.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Decimal>)

Calcula a soma da sequência de Decimal valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Double>)

Calcula a soma da sequência de Double valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Int32>)

Calcula a soma da sequência de Int32 valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Int64>)

Calcula a soma da sequência de Int64 valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Decimal>>)

Calcula a soma da sequência de valores nulos Decimal que são obtidos ao invocar uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Double>>)

Calcula a soma da sequência de valores nulos Double que são obtidos ao invocar uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int32>>)

Calcula a soma da sequência de valores nulos Int32 que são obtidos ao invocar uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Int64>>)

Calcula a soma da sequência de valores nulos Int64 que são obtidos ao invocar uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Nullable<Single>>)

Calcula a soma da sequência de valores nulos Single que são obtidos ao invocar uma função de transformação em cada elemento da sequência de entrada.

Sum<TSource>(IEnumerable<TSource>, Func<TSource,Single>)

Calcula a soma da sequência de Single valores obtidos invocando uma função de transformação em cada elemento da sequência de entrada.

Take<TSource>(IEnumerable<TSource>, Int32)

Devolve um número especificado de elementos contíguos do início de uma sequência.

Take<TSource>(IEnumerable<TSource>, Range)

Devolve um intervalo especificado de elementos contíguos de uma sequência.

TakeLast<TSource>(IEnumerable<TSource>, Int32)

Devolve uma nova coleção enumerável que contém os últimos count elementos de source.

TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Devolve elementos de uma sequência desde que uma condição especificada seja verdadeira.

TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)

Devolve elementos de uma sequência desde que uma condição especificada seja verdadeira. O índice do elemento é usado na lógica da função de predicado.

ToArray<TSource>(IEnumerable<TSource>)

Cria um array a partir de um IEnumerable<T>.

ToAsyncEnumerable<TSource>(IEnumerable<TSource>)

Converte um IEnumerable<T> para um IAsyncEnumerable<T>.

ToDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Cria a Dictionary<TKey,TValue> partir de uma IEnumerable<T> função seletora de teclas especificada, um comparador e uma função seletora de elementos.

ToDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

Cria um Dictionary<TKey,TValue> a partir de um IEnumerable<T> de acordo com as funções seletoras de teclas e seletores de elementos especificadas.

ToDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Cria um Dictionary<TKey,TValue> a partir de um IEnumerable<T> de acordo com uma função seletora de teclas especificada e um comparador de chaves.

ToDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Cria um Dictionary<TKey,TValue> a partir de um IEnumerable<T> de acordo com uma função seletor de teclas especificada.

ToFrozenDictionary<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Cria um FrozenDictionary<TKey,TValue> a partir de um IEnumerable<T> de acordo com as funções seletoras de teclas e seletores de elementos especificadas.

ToFrozenDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Cria a FrozenDictionary<TKey,TValue> partir de uma IEnumerable<T> função seletora de teclas especificada.

ToFrozenSet<T>(IEnumerable<T>, IEqualityComparer<T>)

Cria um FrozenSet<T> com os valores especificados.

ToHashSet<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>)

Cria um HashSet<T> a partir de um IEnumerable<T> usando o comparer para comparar as chaves.

ToHashSet<TSource>(IEnumerable<TSource>)

Cria um HashSet<T> a partir de um IEnumerable<T>.

ToImmutableArray<TSource>(IEnumerable<TSource>)

Cria um array imutável a partir da coleção especificada.

ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IEqualityComparer<TKey>, IEqualityComparer<TValue>)

Enumera e transforma uma sequência, e produz um dicionário imutável do seu conteúdo usando os comparadores de chave e valor especificados.

ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IEqualityComparer<TKey>)

Enumera e transforma uma sequência, e produz um dicionário imutável do seu conteúdo usando o comparador de chaves especificado.

ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>)

Enumera e transforma uma sequência, e produz um dicionário imutável do seu conteúdo.

ToImmutableDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Constrói um dicionário imutável baseado numa transformação de uma sequência.

ToImmutableDictionary<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Constrói um dicionário imutável a partir de uma coleção existente de elementos, aplicando uma função de transformação às chaves fonte.

ToImmutableHashSet<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>)

Enumera uma sequência, produz um conjunto de hash imutável do seu conteúdo e utiliza o comparador de igualdade especificado para o tipo de conjunto.

ToImmutableHashSet<TSource>(IEnumerable<TSource>)

Enumera uma sequência e produz um conjunto de hash imutável do seu conteúdo.

ToImmutableList<TSource>(IEnumerable<TSource>)

Enumera uma sequência e produz uma lista imutável do seu conteúdo.

ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IComparer<TKey>, IEqualityComparer<TValue>)

Enumera e transforma uma sequência, e produz um dicionário ordenado imutável do seu conteúdo usando os comparadores de chave e valor especificados.

ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IComparer<TKey>)

Enumera e transforma uma sequência, e produz um dicionário ordenado imutável do seu conteúdo usando o comparador de chaves especificado.

ToImmutableSortedDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>)

Enumera e transforma uma sequência, produzindo um dicionário ordenado imutável do seu conteúdo.

ToImmutableSortedSet<TSource>(IEnumerable<TSource>, IComparer<TSource>)

Enumera uma sequência, produz um conjunto ordenado imutável do seu conteúdo e utiliza o comparador especificado.

ToImmutableSortedSet<TSource>(IEnumerable<TSource>)

Enumera uma sequência e produz um conjunto ordenado imutável do seu conteúdo.

ToList<TSource>(IEnumerable<TSource>)

Cria um List<T> a partir de um IEnumerable<T>.

ToLookup<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Cria a Lookup<TKey,TElement> partir de uma IEnumerable<T> função seletora de teclas especificada, um comparador e uma função seletor de elementos.

ToLookup<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

Cria um Lookup<TKey,TElement> a partir de um IEnumerable<T> de acordo com as funções seletoras de teclas e seletores de elementos especificadas.

ToLookup<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Cria um Lookup<TKey,TElement> a partir de um IEnumerable<T> de acordo com uma função seletora de teclas especificada e um comparador de chaves.

ToLookup<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Cria um Lookup<TKey,TElement> a partir de um IEnumerable<T> de acordo com uma função seletor de teclas especificada.

TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32)

Tenta determinar o número de elementos em uma sequência sem forçar uma enumeração.

Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Produz a união de conjuntos de duas sequências usando um especificado IEqualityComparer<T>.

Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Produz a união conjunta de duas sequências usando o comparador de igualdade padrão.

UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Produz a união conjunta de duas sequências de acordo com uma função seletora de teclas especificada.

UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>)

Produz a união conjunta de duas sequências de acordo com uma função seletora de teclas especificada.

Where<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Filtra uma sequência de valores com base num predicado.

Where<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)

Filtra uma sequência de valores com base num predicado. O índice de cada elemento é usado na lógica da função de predicado.

Zip<TFirst,TSecond,TResult>(IEnumerable<TFirst>, IEnumerable<TSecond>, Func<TFirst,TSecond,TResult>)

Aplica uma função especificada aos elementos correspondentes de duas sequências, produzindo uma sequência dos resultados.

Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>)

Produz uma sequência de tuplas com elementos das três sequências especificadas.

Zip<TFirst,TSecond>(IEnumerable<TFirst>, IEnumerable<TSecond>)

Produz uma sequência de tuplas com elementos das duas sequências especificadas.

Aplica-se a

Segurança de Thread

Este tipo é seguro para fios.

Ver também