¿Es una buena práctica comparar cadenas con ==
? ¿Hay un equivalente a s1 == s2
en términos de Compare
y Equals
métodos en string
. Si uno usa esos métodos, sin especificar CultureInfo
FxCop dará una advertencia, ¿es eso un problema real?¿Es una buena práctica comparar la cadena C# con '=='?
Respuesta
El operador ==
es una comparación ordinal, sin conocimiento cultural. Está utilizando la misma llamada interna como .Equals
, y está bien para la cadena "habitual" comparar cosas.
Si necesita comparings Cultura-Aware (por ejemplo. Para los propósitos GUI), como el alemán doble-s o ß, utilice
CultureInfo ci = new CultureInfo("de-DE");
String.Compare("Strasse", "Straße", true, ci)
Sí, esa práctica está bien. También puede usar String.Compare, y la mejor comparación se encuentra en Best Pratices for Using Strings in the .NET Framework.
Sí, FxCop, dará advertencias, pero las advertencias son advertencias. Si no te importa la cultura, es seguro ignorarlos. Pero, al igual que las advertencias de la vida real, a veces vale la pena prestarles atención.
Cuando se comparan cadenas, debe utilizar los métodos que especifican explícitamente qué tipo de comparación que tiene la intención de realizar. Esto hace que su código sea mucho más fácil de mantener y legible. Siempre que sea posible, use las sobrecargas de los métodos de las clases System.String y System.Array que toman un parámetro de enumeración StringComparison, de modo que pueda especificar qué tipo de comparación realizar. Lo mejor es evitar el uso de los operadores == y! = Al comparar cadenas. Además, evite utilizar los métodos de instancia String.CompareTo porque ninguna de las sobrecargas toma un StringComparison.
Dependiendo de sus necesidades, se puede utilizar en los siguientes métodos:
bool result = root.Equals(root2, StringComparison.Ordinal);
result = root.Equals(root2, StringComparison.OrdinalIgnoreCase);
bool areEqual = String.Equals(root, root2, StringComparison.Ordinal);
Fuente para esta respuesta: http://msdn.microsoft.com/en-us/library/cc165449.aspx
No es extensivedocumentation en MSDN que habla de ordinal y cultura -sensible comparaciones de cadenas. Las comparaciones Ordinal no se preocupan por la lingüística y, de forma predeterminada, se ocuparán del caso. Las comparaciones sensibles a la cultura se preocupan por la lingüística (casos, punctación, etc.).
Este article en dotnetperls se clava en las implicaciones de rendimiento e incluso muestra IL y puntos de referencia para los dos métodos de comparación de cadenas (==
y equals
).
Y, por último, esto muestra que question==
es estrictamente una comparación de cadenas ordinal y no es apropiado para localizadas cuerdas.
Si una cadena puede ser nula o está vacía (también conocido como ""), desea utilizar una cadena.IsNullOrEmpty (...);
De lo contrario, está bien en mi libro o la mayoría de las cosas. Depende de lo que hagas.
- 1. ¿VERIFY (...) es una buena práctica en la codificación C++?
- 2. C# - ¿Agregar una interfaz sistemáticamente es una buena práctica?
- 3. ¿Es una buena práctica liberar un puntero NULL en C?
- 4. ¿Es una buena idea comparar double.MaxValue para la igualdad?
- 5. ¿Es este patrón de singleton C# modificado una buena práctica?
- 6. ¿Es la buena práctica del subdominio www?
- 7. ¿Es la inicialización estática una buena práctica de programación?
- 8. ¿Qué es una buena práctica para construir parches de software?
- 9. ¿Es una buena práctica implementar lógica en las propiedades
- 10. cómo comparar cadena con enum en C#
- 11. ¿Es esta una buena práctica para una excepción personalizada?
- 12. ¿Es una buena práctica inicializar una variable a nulo?
- 13. ¿Es una buena práctica escribir métodos que devuelvan el vacío?
- 14. ¿Es una buena práctica actualizar los paquetes R a menudo?
- 15. ¿Los objetos inmutables son una buena práctica?
- 16. Delphi - FieldByName.AsString - buena práctica
- 17. ¿es una buena práctica usar iframe para implementar header/navbar?
- 18. ¿Es una buena práctica extraer literales de cadena a constantes en Javascript?
- 19. ¿Es una buena práctica hacer que el constructor sea explícito?
- 20. ¿Es una buena práctica tener consulta de linq en Controladores?
- 21. ¿Es una buena práctica exportar variables en Perl?
- 22. ¿Es una buena práctica usar rawQuery en ContentProvider?
- 23. ¿Cuál de estas opciones es una buena práctica para asignar un valor de cadena a una variable en C?
- 24. ¿Es una buena práctica mostrar la identificación de la sesión en la url?
- 25. ¿Es una buena práctica devolver el puntero de la función en c?
- 26. llamadas asincrónicas dentro de obtener acceso - ¿es una buena práctica?
- 27. ¿Es una buena práctica usar assert en Java?
- 28. ¿El espacio de nombres JQuery es una buena práctica?
- 29. Java: ¿es una buena práctica definir beans en XML?
- 30. Java - ¿Es esta una buena práctica de programación?
¿Qué tipo de comparación quieres hacer? –
Depende de lo que esté comparando: el msdn es perfecto para este http://msdn.microsoft.com/en-us/library/cc165449.aspx – JonH
Esta página tiene una buena explicación: http://www.dotnetperls.com/string-equals – keyboardP