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.
Es posible que también desee ver esa pregunta ya contestada Diferencias en los métodos de comparación de cadenas en C #
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!