2010-05-21 14 views

Respuesta

4

En efecto, existe una diferencia entre los caracteres que comparan y cuerdas. Permítanme intentar explicar el problema básico, que es bastante simple: un personaje siempre representa un único punto Unicode. La comparación de caracteres siempre compara los puntos de código sin tener en cuenta su igual significado.

Si desea comparar caracteres con el mismo significado, debe crear una cadena y utilizar los métodos de comparación proporcionados allí. Estos incluyen apoyo para diferentes culturas. Vea la respuesta de Guffa sobre cómo hacer eso.

1

No creo que cultureInfo importe al comparar caracteres en C#. char ya es un carácter Unicode, por lo que se pueden comparar fácilmente dos caracteres witohut CultureInfo.

+1

Creo que el objetivo de la pregunta es tener igualdad para diferentes caracteres Unicode con el mismo significado en una cultura determinada. Por ejemplo, (al ignorar el caso) i y yo somos iguales en el Reino Unido, pero no en Turquía. – mafu

+0

Creo que está buscando kindaa tihng porceso de lenguaje natural. –

+0

@mafutrct, @ this: Sí, tengo curiosidad por saber qué posibilidades hay para comparar un char dentro de una determinada cultura (por ejemplo, en turquía). Parece que hay una diferencia, cuando comparo con los caracteres y dos caracteres convertidos en cuerda. – tanascius

2

¿Has probado String.Compare Método?

La comparación utiliza la cultura actual para obtener información cultural específica, como las reglas de la carcasa y el orden alfabético de los caracteres individuales. Por ejemplo, una cultura podría especificar que ciertas combinaciones de caracteres se traten como un solo carácter, o que los caracteres en mayúsculas y minúsculas se comparen de una manera particular, o que el orden de clasificación de un personaje dependa de los caracteres que lo preceden o lo siguen.

String.Compare(str1, str2, false, new CultureInfo("en-US")) 
3

No hay cultura permitido la comparación de caracteres, usted tiene que convertir los caracteres a las cadenas de modo que se puede utilizar, por ejemplo, el método String.Compare(string, string, CultureInfo, CompareOptions).

Ejemplo:

char a = 'å'; 
char b = 'ä'; 

// outputs -1: 
Console.WriteLine(String.Compare(
    a.ToString(), 
    b.ToString(), 
    CultureInfo.GetCultureInfo("sv-SE"), 
    CompareOptions.IgnoreCase 
)); 

// outputs 1: 
Console.WriteLine(String.Compare(
    a.ToString(), 
    b.ToString(), 
    CultureInfo.GetCultureInfo("en-GB"), 
    CompareOptions.IgnoreCase 
)); 
Cuestiones relacionadas