Como la versión estática del método .Equal
no se mencionó hasta ahora, me gustaría agregar esto aquí para resumir y comparar las 3 variaciones.
MyString.Equals("Somestring")) //Method 1
MyString == "Somestring" //Method 2
String.Equals("Somestring", MyString); //Method 3 (static String.Equals method) - better
donde MyString
es una variable que viene de alguna otra parte del código.
información de fondo y para summerize:
En Java utilizando ==
para comparar cadenas no deben utilizarse. Menciono esto en caso de que necesite usar ambos idiomas y también para hacerle saber que el uso de ==
también se puede reemplazar con algo mejor en C#.
En C# no hay ninguna diferencia práctica para comparar cadenas utilizando el Método 1 o el Método 2, siempre que ambas sean de tipo cadena.Sin embargo, si uno es nulo, uno es de otro tipo (como un entero), o uno representa un objeto que tiene una referencia diferente, entonces, como muestra la pregunta inicial, puede experimentar que comparar el contenido para la igualdad puede no devolver lo que tu esperas.
solución sugerida:
Dado que el uso ==
no es exactamente lo mismo que usar .Equals
al comparar las cosas, se puede utilizar el String.Equals estáticas método en su lugar. De esta forma, si las dos partes no son del mismo tipo, igual compararás el contenido y si uno es nulo, evitarás la excepción.
bool areEqual = String.Equals("Somestring", MyString);
Es un poco más para escribir, pero en mi opinión, más seguro de usar.
Aquí hay alguna información copiada de Microsoft:
public static bool Equals (string a, string b);
Parámetros
a
cadena
La primera cadena de comparar, o null
.
b
cadena
La segunda cadena de comparar, o null
.
devoluciones Boolean
true
si el valor de a
es el mismo que el valor de b
; de lo contrario, false
. Si ambos a
y b
son null
, el método devuelve true
.
Vea también: http://stackoverflow.com/questions/144530/or-equals – Arrow
@ColonelPanic Silverlight se clasifica como "WPF en todas partes", WPF está construido sobre .NET y la pregunta usa C#, que es a. Lenguaje NET. –
La cadena anula '==', pero los operadores no son polimórficos. En este código, el operador '==' se invoca en el tipo 'object', que hace una comparación de identidad en lugar de un valor uno. –