Biblioteca de clases de .NET Framework
CompareOptions (Enumeración)

Actualización: noviembre 2007

Define las opciones de comparación de cadenas que se van a utilizar con CompareInfo.

Esta enumeración tiene un atributo ComVisibleAttribute que permite una combinación bit a bit de los valores de miembro.

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

Visual Basic (Declaración)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<FlagsAttribute> _
Public Enumeration CompareOptions
Visual Basic (Uso)
Dim instance As CompareOptions
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
[FlagsAttribute]
public enum CompareOptions
Visual C++
[SerializableAttribute]
[ComVisibleAttribute(true)]
[FlagsAttribute]
public enum class CompareOptions
J#
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
/** @attribute FlagsAttribute */
public enum CompareOptions
JScript
public enum CompareOptions
Miembros

Nombre de miembroDescripción
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifNoneIndica la configuración predeterminada de las opciones para la comparación de cadenas.
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifIgnoreCaseIndica que en la comparación de cadenas no se debe tener en cuenta la distinción entre mayúsculas y minúsculas.
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifIgnoreNonSpaceIndica que en las comparaciones de cadenas no deben tenerse en cuenta los caracteres combinables sin espaciado, como los diacríticos. El estándar Unicode define los caracteres combinables como aquellos que se combinan con caracteres base para producir un nuevo carácter. Los caracteres combinables sin espaciado no ocupan por sí mismos un espacio cuando se representan. Para obtener más información sobre caracteres combinables sin espacios, vea The Unicode Standard en Unicode home page.
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifIgnoreSymbolsIndica que en la comparación de cadenas no se deben tener en cuenta los símbolos, como los caracteres de espacio en blanco, la puntuación, los símbolos de moneda, el signo de porcentaje, los símbolos matemáticos, la Y comercial (&), etc.
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifIgnoreKanaTypeIndica que en la comparación de cadenas no se debe tener en cuenta el tipo Kana. El tipo Kana hace referencia a los caracteres japoneses hiragana y katakana, que representan sonidos fonéticos del idioma japonés. Los caracteres hiragana se utilizan en expresiones y palabras propias del idioma japonés, mientras que los caracteres katakana se utilizan para préstamos léxicos, como "Internet". Un sonido fonético puede expresarse tanto en caracteres hiragana como katakana. Si se selecciona este valor, el carácter hiragana de un sonido se considera equivalente al carácter katakana del mismo sonido.
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifIgnoreWidthIndica que en la comparación de cadenas no se debe tener en cuenta el ancho de los caracteres. Por ejemplo, los caracteres katakana japoneses se pueden escribir como ancho completo o medio ancho. Si se selecciona este valor, los caracteres katakana escritos como ancho completo se consideran iguales que los mismos caracteres escritos como medio ancho.
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifOrdinalIgnoreCaseLa comparación de cadenas debe omitir la distinción entre mayúsculas y minúsculas y, a continuación, realizar una comparación de ordinales. Esta técnica es equivalente a poner la cadena en mayúsculas utilizando la referencia cultural de todos los idiomas y realizar después una comparación de ordinales en el resultado.
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifStringSortIndica que la comparación de cadenas debe usar el algoritmo de ordenación por cadena. En una ordenación por cadena, el guión y el apóstrofo, así como otros símbolos no alfanuméricos, van delante de los caracteres alfanuméricos.
cfw20y7b.CFW(es-es,VS.90).gifcfw20y7b.xna(es-es,VS.90).gifOrdinalIndica que la comparación de cadenas debe usar los valores Unicode de cada carácter; generando una comparación rápida, pero que no tiene en cuenta las referencias culturales. Una cadena que empiece por "U+xxxx" se antepondrá a una cadena que comience por "U+yyyy", si xxxx es menor que yyyy. Este valor no se puede combinar con otros valores de CompareOptions y se debe usar solo.
Comentarios

Estas opciones indican si se va a distinguir mayúsculas de minúsculas o la necesidad de omitir tipos de caracteres.

.NET Framework utiliza tres formas diferentes de ordenar: ordenación por palabra, ordenación por cadena y ordenación ordinal. En la ordenación por palabras se realiza una comparación de cadenas específica de la referencia cultural. Algunos caracteres no alfanuméricos quizá tengan grosores especiales asignados a ellos. Por ejemplo, el guión ("-") podría tener asignado un peso muy pequeño, por lo que las cadenas "coop" y "co-op" aparecerían una junto a la otra en una lista ordenada. La ordenación por cadena se parece a la ordenación por palabra, salvo que no hay casos especiales. Por tanto, todos los símbolos no alfanuméricos van delante de todos los caracteres alfanuméricos. La ordenación ordinal compara las cadenas en función de los valores Unicode de cada elemento de la cadena.

El valor de StringSort sólo se puede utilizar con los métodos CompareInfo..::.Compare y CompareInfo..::.GetSortKey. ArgumentException se produce si el valor del campo StringSort se utiliza con los métodos CompareInfo..::.IsPrefix, CompareInfo..::.IsSuffix, CompareInfo..::.IndexOf o CompareInfo..::.LastIndexOf.

Ejemplos

En el siguiente ejemplo de código se muestra cómo la ordenación con el campo StringSort es diferente de la ordenación sin el campo StringSort.

Visual Basic
Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesCompareOptions

   Private Class MyStringComparer
      Implements IComparer

      Private myComp As CompareInfo
      Private myOptions As CompareOptions = CompareOptions.None

      ' Constructs a comparer using the specified CompareOptions.
      Public Sub New(cmpi As CompareInfo, options As CompareOptions)
         myComp = cmpi
         Me.myOptions = options
      End Sub 'New

      ' Compares strings with the CompareOptions specified in the constructor.
      Public Function Compare(a As [Object], b As [Object]) As Integer Implements IComparer.Compare
         If a = b Then
            Return 0
         End If
         If a Is Nothing Then
            Return - 1
         End If
         If b Is Nothing Then
            Return 1
         End If 

         Dim sa As [String] = a
         Dim sb As [String] = b
         If Not (sa Is Nothing) And Not (sb Is Nothing) Then
            Return myComp.Compare(sa, sb, myOptions)
         End If
         Throw New ArgumentException("a and b should be strings.")

      End Function 'Compare 

   End Class 'MyStringComparer


   Public Shared Sub Main()

      ' Creates and initializes an array of strings to sort.
      Dim myArr() As [String] = {"cant", "bill's", "coop", "cannot", "billet", "can't", "con", "bills", "co-op"}
      Console.WriteLine()
      Console.WriteLine("Initially,")
      Dim myStr As [String]
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

      ' Creates and initializes a Comparer to use.
      'CultureInfo myCI = new CultureInfo( "en-US", false );
      Dim myComp As New MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.None)

      ' Sorts the array without StringSort.
      Array.Sort(myArr, myComp)
      Console.WriteLine()
      Console.WriteLine("After sorting without CompareOptions.StringSort:")
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

      ' Sorts the array with StringSort.
      myComp = New MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.StringSort)
      Array.Sort(myArr, myComp)
      Console.WriteLine()
      Console.WriteLine("After sorting with CompareOptions.StringSort:")
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

   End Sub 'Main

End Class 'SamplesCompareOptions 


'This code produces the following output.
'
'Initially,
'cant
'bill's
'coop
'cannot
'billet
'can't
'con
'bills
'co-op
'
'After sorting without CompareOptions.StringSort:
'billet
'bills
'bill's
'cannot
'cant
'can't
'con
'coop
'co-op
'
'After sorting with CompareOptions.StringSort:
'bill's
'billet
'bills
'can't
'cannot
'cant
'co-op
'con
'coop

C#
using System;
using System.Collections;
using System.Globalization;


public class SamplesCompareOptions  {

   private class MyStringComparer: IComparer {
      private CompareInfo myComp;   
      private CompareOptions myOptions = CompareOptions.None;

      // Constructs a comparer using the specified CompareOptions.
      public MyStringComparer( CompareInfo cmpi, CompareOptions options )  {
         myComp = cmpi;
         this.myOptions = options;
      }

      // Compares strings with the CompareOptions specified in the constructor.
      public int Compare(Object a, Object b) {
         if (a == b) return 0;
         if (a == null) return -1;
         if (b == null) return 1;

         String sa = a as String;
         String sb = b as String;
         if (sa != null && sb != null)
            return myComp.Compare(sa, sb, myOptions);
         throw new ArgumentException("a and b should be strings.");

      }
   }

   public static void Main()  {

      // Creates and initializes an array of strings to sort.
      String[] myArr = new String[9] { "cant", "bill's", "coop", "cannot", "billet", "can't", "con", "bills", "co-op" };
      Console.WriteLine( "\nInitially," );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );

      // Creates and initializes a Comparer to use.
      //CultureInfo myCI = new CultureInfo( "en-US", false );
      MyStringComparer myComp = new MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.None);

      // Sorts the array without StringSort.
      Array.Sort( myArr, myComp );
      Console.WriteLine( "\nAfter sorting without CompareOptions.StringSort:" );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );

      // Sorts the array with StringSort.
      myComp = new MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.StringSort);
      Array.Sort( myArr, myComp );
      Console.WriteLine( "\nAfter sorting with CompareOptions.StringSort:" );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );

   }

}

/*
This code produces the following output.

Initially,
cant
bill's
coop
cannot
billet
can't
con
bills
co-op

After sorting without CompareOptions.StringSort:
billet
bills
bill's
cannot
cant
can't
con
coop
co-op

After sorting with CompareOptions.StringSort:
bill's
billet
bills
can't
cannot
cant
co-op
con
coop

*/
Visual C++
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

// __gc public class SamplesCompareOptions {
ref class MyStringComparer: public IComparer
{
public:

   // Constructs a comparer using the specified CompareOptions.
   CompareInfo^ myComp;
   CompareOptions myOptions;
   MyStringComparer( CompareInfo^ cmpi, CompareOptions options )
      : myComp( cmpi ), myOptions( options )
   {}

   // Compares strings with the CompareOptions specified in the constructor.
   virtual int Compare( Object^ a, Object^ b )
   {
      if ( a == b )
            return 0;

      if ( a == nullptr )
            return  -1;

      if ( b == nullptr )
            return 1;

      String^ sa = dynamic_cast<String^>(a);
      String^ sb = dynamic_cast<String^>(b);
      if ( sa != nullptr && sb != nullptr )
            return myComp->Compare( sa, sb, myOptions );

      throw gcnew ArgumentException( "a and b should be strings." );
   }
};

int main()
{

   // Creates and initializes an array of strings to sort.
   array<String^>^myArr = {"cant","bill's","coop","cannot","billet","can't","con","bills","co-op"};
   Console::WriteLine( "\nInitially, " );
   IEnumerator^ myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }


   // Creates and initializes a Comparer to use.
   //CultureInfo* myCI = new CultureInfo(S"en-US", false);
   MyStringComparer^ myComp = gcnew MyStringComparer( CompareInfo::GetCompareInfo( "en-US" ),CompareOptions::None );

   // Sorts the array without StringSort.
   Array::Sort( myArr, myComp );
   Console::WriteLine( "\nAfter sorting without CompareOptions::StringSort:" );
   myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }


   // Sorts the array with StringSort.
   myComp = gcnew MyStringComparer( CompareInfo::GetCompareInfo( "en-US" ),CompareOptions::StringSort );
   Array::Sort( myArr, myComp );
   Console::WriteLine( "\nAfter sorting with CompareOptions::StringSort:" );
   myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }
}

/*
This code produces the following output.

Initially,
cant
bill's
coop
cannot
billet
can't
con
bills
co-op

After sorting without CompareOptions::StringSort:
billet
bills
bill's
cannot
cant
can't
con
coop
co-op

After sorting with CompareOptions::StringSort:
bill's
billet
bills
can't
cannot
cant
co-op
con
coop
*/
J#
import System.* ;
import System.Collections.* ;
import System.Globalization.* ;

public class SamplesCompareOptions
{
    private class MyStringComparer implements IComparer
    {
        private CompareInfo myComp;
        private CompareOptions myOptions = CompareOptions.None;

        // Constructs a comparer using the specified CompareOptions.
        public MyStringComparer(CompareInfo cmpi, CompareOptions options)
        {
            myComp = cmpi;
            this.myOptions = options;
        } //MyStringComparer

        // Compares strings with the CompareOptions specified in the 
        // constructor.
        public int Compare(Object a, Object b)
        {
            if (a == b) {
                return 0;
            }
            if (a == null) {
                return -1;
            }
            if (b == null) {
                return 1;
            }

            String sa =(String) a;
            String sb = (String)b;
            if (sa  != null && sb  != null) {
                return myComp.Compare(sa, sb, myOptions);
            }
            throw new ArgumentException("a and b should be strings.");
        } //Compare 
    } //MyStringComparer

    public static void main(String[] args)
    {
        // Creates and initializes an array of strings to sort.
        String myArr[] = new String[]{"cant", "bill's", "coop", "cannot", 
            "billet", "can't", "con", "bills", "co-op"};
        Console.WriteLine("\nInitially,");
            SamplesCompareOptions mySamplesCompareOptions = 
                new SamplesCompareOptions();    

        for(int i=0 ; i < myArr.length ;i++) {
            String myStr = myArr[i];
            Console.WriteLine(myStr);
        }
        // Creates and initializes a Comparer to use.
        //CultureInfo myCI = new CultureInfo( "en-US", false );
        MyStringComparer myComp = mySamplesCompareOptions.new MyStringComparer(
            CompareInfo.GetCompareInfo("en-US"), CompareOptions.None);

        // Sorts the array without StringSort.
        Array.Sort(myArr, myComp);
        Console.WriteLine("\nAfter sorting without CompareOptions.StringSort:");

        for(int i=0; i< myArr.length ;i++) {
            String myStr = myArr[i];
            Console.WriteLine(myStr);
        }

        // Sorts the array with StringSort.
        myComp = mySamplesCompareOptions.new MyStringComparer(
            CompareInfo.GetCompareInfo("en-US"), CompareOptions.StringSort);
        Array.Sort(myArr, myComp);
        Console.WriteLine("\nAfter sorting with CompareOptions.StringSort:");

        for(int i=0; i< myArr.length ;i++) {
            String myStr = myArr[i];
            Console.WriteLine(myStr);
        }
    } //main 
} //SamplesCompareOptions

/*
This code produces the following output.

Initially,
cant
bill's
coop
cannot
billet
can't
con
bills
co-op

After sorting without CompareOptions.StringSort:
billet
bills
bill's
cannot
cant
can't
con
coop
co-op

After sorting with CompareOptions.StringSort:
bill's
billet
bills
can't
cannot
cant
co-op
con
coop
*/
Plataformas

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

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Información de versión

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0
Vea también

Referencia

Otros recursos

Etiquetas :


Page view tracker