Qualcuno può spiegare perché questi due metodi restituiscono valori diversi?C# contiene il comportamento
List<CustomerSummary> summaries = new List<CustomerSummary>();
for (var i = 0; i < 10; i++)
{
var summary = new CustomerSummary() { ID = 1, Name = "foo", balance = 50.00 };
if (!summaries.Contains(summary))
summaries.Add(summary);
}
-
List<CustomerSummary> summaries = new List<CustomerSummary>();
for (var i = 0; i < 10; i++)
{
var summary = new CustomerSummary() { ID = 1, Name = "foo", balance = 50.00 };
if (!summaries.Any(s=> s.ID == summary.ID))
summaries.Add(summary);
}
Il primo metodo ha 10 elementi nella lista, mentre il secondo ha 1. Perché la prima (contiene()) Metodo mai valutare come vero?
Quello che sto cercando di chiedere è perché sono 2 oggetti dello stesso tipo con gli stessi valori per ogni proprietà che non valuta come equivalente (nel primo metodo)?
Forse questa è la parte che non capisco - l'istanza. Perché 2 oggetti dello stesso tipo hanno gli stessi valori per ogni proprietà che non valuta come equivalente? – user2865446
Questo è solo il modo in cui funziona, per impostazione predefinita. Hai una raccolta di istanze di 'CustomerSummary', e poi crei una nuova istanza' CustomerSummary'. Quando esegui il confronto 'Contains()', stai davvero confrontando il riferimento della tua nuova _instance_ con i riferimenti di tutte le istanze precedenti già presenti nella raccolta ... non stai confrontando i valori di tutte le singole proprietà a vicenda. –
Tuttavia, puoi _can_ implementare l'interfaccia ['IEqualityComparer'] (http://stackoverflow.com/questions/6694508/how-to-use-the-iequalitycomparer) sulla tua classe' CustomerSummary' (fai una ricerca e trovare buoni tutorial). Fondamentalmente, se implementato correttamente, specifica come confrontare due istanze di un oggetto. Ad esempio, è possibile definire esplicitamente che due istanze di 'CustomerSummary' sono uguali quando i loro valori di' ID' sono uguali. –