StringComparer (Clase)

Nota: esta clase es nueva en la versión 2.0 de .NET Framework.

Representa una operación de comparación de cadenas que utiliza reglas específicas basadas en la referencia cultural y el uso de mayúsculas y minúsculas o reglas específicas de comparación de ordinales.

Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public abstract class StringComparer : IComparer, IEqualityComparer, IComparer<string>, 
	IEqualityComparer<string>
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public abstract class StringComparer implements IComparer, IEqualityComparer, 
	IComparer<String>, IEqualityComparer<String>
SerializableAttribute 
ComVisibleAttribute(true) 
public abstract class StringComparer implements IComparer, IEqualityComparer, 
	IComparer<String>, IEqualityComparer<String>

Un objeto derivado de la clase StringComparer incorpora operaciones de comparación, igualdad y código hash basadas en cadenas, en las que se tienen en cuenta tanto las reglas de comparación de uso de mayúsculas y minúsculas, como las específicas de la referencia cultural. Puede utilizar la clase StringComparer para crear una comparación específica del tipo para ordenar los elementos de una colección genérica. Las clases como Hashtable, Dictionary, SortedList y SortedList utilizan la clase StringComparer para la ordenación.

Una operación de comparación representada por la clase StringComparer se define para que distinga entre mayúsculas y minúsculas o no y para que utilice reglas de comparación de palabras (específicas de la referencia cultural) o reglas de comparación de ordinales (que no tienen en cuenta la referencia cultural). Para obtener más información sobre las reglas de comparación de palabras y ordinales, vea System.Globalization.CompareOptions.

Propiedades implementadas

Es posible que no sepa muy bien cómo utilizar las propiedades de la clase StringComparer debido a lo que parece una contradicción. La clase StringComparer se declara abstract (MustInherit en Visual Basic), lo que significa que sus miembros sólo se pueden invocar en un objeto de una clase derivada de la clase StringComparer. La contradicción reside en que cada propiedad de la clase StringComparer se declara static (Shared en Visual Basic), lo que significa que la propiedad se puede invocar sin crear antes una clase derivada.

Puede llamar a una propiedad StringComparer directamente, porque cada propiedad devuelve en realidad una instancia de una clase anónima que deriva de la clase StringComparer. Por consiguiente, el tipo de cada valor de la propiedad es StringComparer, que es la clase base de la clase anónima, no el tipo de la propia clase anónima. Cada propiedad de la clase StringComparer devuelve un objeto StringComparer que admite reglas predefinidas de comparación y de uso de mayúsculas y minúsculas.

En el ejemplo de código siguiente se muestran las propiedades y el método Create de la clase StringComparer. El ejemplo muestra cómo diferentes objetos StringComparer ordenan tres versiones de la letra I del alfabeto latino.

// This example demonstrates members of the 
// System.StringComparer class.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

class Sample 
{
    public static void Main() 
    {
// Create a list of string.
    List<string> list = new List<string>();

// Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo turkish = new CultureInfo("tr-TR");

// Get the culture that is associated with the current thread.
    CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;

// Get the standard StringComparers.
    StringComparer invCmp =   StringComparer.InvariantCulture;
    StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
    StringComparer currCmp = StringComparer.CurrentCulture;
    StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
    StringComparer ordCmp = StringComparer.Ordinal;
    StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;

// Create a StringComparer that uses the Turkish culture and ignores case.
    StringComparer turkICComp = StringComparer.Create(turkish, true);

// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
    string capitalLetterI = "I";  

// LATIN SMALL LETTER I (U+0069)
    string smallLetterI   = "i";

// LATIN SMALL LETTER DOTLESS I (U+0131)
    string smallLetterDotlessI = "\u0131";

// Add the three strings to the list.
    list.Add(capitalLetterI);
    list.Add(smallLetterI);
    list.Add(smallLetterDotlessI);

// Display the original list order.
    Display(list, "The original order of the list entries...");

// Sort the list using the invariant culture.
    list.Sort(invCmp);
    Display(list, "Invariant culture...");
    list.Sort(invICCmp);
    Display(list, "Invariant culture, ignore case...");

// Sort the list using the current culture.
    Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
    list.Sort(currCmp);
    Display(list, "Current culture...");
    list.Sort(currICCmp);
    Display(list, "Current culture, ignore case...");

// Sort the list using the ordinal value of the character code points.
    list.Sort(ordCmp);
    Display(list, "Ordinal...");
    list.Sort(ordICCmp);
    Display(list, "Ordinal, ignore case...");

// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER 
// DOTLESS I differently than LATIN SMALL LETTER I.
    list.Sort(turkICComp);
    Display(list, "Turkish culture, ignore case...");
    }

    public static void Display(List<string> lst, string title)
    {
    Char c;
    int  codePoint;
    Console.WriteLine(title);
    foreach (string s in lst)
        {
        c = s[0];
        codePoint = Convert.ToInt32(c);
        Console.WriteLine("0x{0:x}", codePoint); 
        }
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

System.Object
  System.StringComparer

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0

.NET Compact Framework

Compatible con: 2.0

Adiciones de comunidad

AGREGAR
Mostrar: