visual validar una studio net minusculas mayusculas ignorar convertir comparar como caracteres cadenas cadena c# string comparison equals

c# - validar - ignorar mayusculas y minusculas java



Comparando dos cadenas, ignorando mayúsculas y minúsculas en c# (8)

1st es más eficiente (y la mejor opción posible) porque val.ToLowerCase() crea un nuevo objeto ya que las cadenas son inmutables.

Posible duplicado:
¿Cuál es la diferencia entre los diferentes métodos de comparación de cadenas?

¿Cuál de los dos siguientes es más eficiente? (O tal vez hay una tercera opción que es mejor todavía?)

string val = "AStringValue"; if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))

O

if (val.ToLowerCase() == "astringvalue")

?


El primero es el correcto y, en mi humilde opinión, el más eficiente, ya que la segunda "solución" crea una instancia de una nueva cadena.


El primero es el más rápido. Resulta que val es inmutable, por lo que se crea un nuevo objeto de cadena con String.ToLowerCase (), en lugar de solo una comparación directa con el comparador de cadenas. Crear un nuevo objeto de cadena puede ser costoso si lo hace varias veces por segundo.



La versión .ToLowerCase no va a ser más rápida, implica una asignación de cadena adicional (que luego debe recopilarse), etc.

Personalmente, yo usaría

string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)

esto evita todos los problemas de las cadenas sensibles a la cultura, pero como consecuencia evita todos los problemas de las cadenas sensibles a la cultura . Solo tú sabes si eso está bien en tu contexto.

El uso del método estático string.Equals evita cualquier problema con el hecho de que val sea null .


Me atrevería a decir que lo más seguro es utilizar String.Equals para mitigar la posibilidad de que val sea null .


Mi respuesta general a este tipo de pregunta sobre "eficiencia" es casi siempre que la versión del código más legible es la más eficiente.

Dicho esto, creo que (val.ToLowerCase() == "astringvalue") es bastante comprensible de un vistazo para la mayoría de las personas.

La eficiencia a la que me refiero no es necesariamente en la ejecución del código, sino más bien en el mantenimiento y, en general, la legibilidad del código en cuestión.


Si buscas eficiencia, usa esto:

string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)

Las comparaciones ordinales pueden ser significativamente más rápidas que las comparaciones conscientes de la cultura.

ToLowerCase , ToLowerCase puede ser la mejor opción si estás haciendo muchas comparaciones con la misma cadena.

Al igual que con cualquier optimización de rendimiento: mídalo, luego decida!