2008-10-06 23 views
5
List<tinyClass> ids = new List<tinyClass(); 
ids.Add(new tinyClass(1, 2)); 

bool b = ids.IndexOf(new tinyClass(1, 2)) >= 0; //true or false? 

Si se compara con el valor, debe devolver verdadero; si por referencia, devolverá falso.
Si se compara por referencia, y hago de tinyClass una estructura, ¿hará eso la diferencia?¿List <>. IndexOf se compara por referencia o valor?

+0

O para ejecutar el ejemplo de código y verifica el resultado;) – OregonGhost

Respuesta

16

De MSDN:

Este método determina la igualdad utilizando el comparador de igualdad predeterminado EqualityComparer <T> .Default para T, el tipo de valores en la lista.

Los cheques propiedad predeterminada si el tipo T implementa la interfaz genérica System.IEquatable <T> y si es así, devuelve un EqualityComparer <T> que utilice esa aplicación. De lo contrario, devuelve un EqualityComparer <T> que utiliza las sustituciones de Object.equals y Object.GetHashCode proporcionado por T.

parece que utiliza el método equals, a menos que la clase almacenado implementa la interfaz > IEquatable < T.

1

Depende de la implementación del objeto de .Equals (..). Por defecto para un objeto, las referencias son comparadas. Si lo cambió a una estructura, entonces creo que se evaluaría como verdadero en función de la igualdad de los miembros privados, pero aún sería más sólido desde el punto de vista del sistema implementar IEquatable.

2

Para una clase, con la implementación predeterminada de Iguales, se comparará por referencia.

Si lo cambia a un tinyStruct, lo comparará por valor.

0

también, puede estar relacionado con cuál de clase o instancia Struct se mantiene en la lista, debido Las estructuras iguales aplicación se basa en los valores de la igualdad

Cuestiones relacionadas