ho qualcosa di simile:C# Usa oggetto piuttosto che di riferimento per List.Contains()
public class MyClass
{
public string Type { get; set; }
public int Value { get; set; }
}
e poi ho:
List<MyClass> myList = new List<MyClass>()
// ... Populate myList
if (myList.Contains("testType"))
{
// Do something
}
Nel codice di cui sopra, voglio myList.Contains()
per abbinare sulla proprietà Type piuttosto che sul riferimento all'oggetto MyClass. Come ottengo questo? Si utilizza l'interfaccia IComparable
o ICompare
, si esegue l'override di MyClass.Equals()
oppure è sufficiente ignorare il cast di stringa di MyClass?
Edit: Dopo aver fatto alcuni test con l'override Equals()
e il cast serie di MyClass
, attuazione e ICompare
IComparable
, ho scoperto che nessuno di questi metodi funziona. In realtà, sembra che quello che potrebbe funzionare è se dovessi scavalcare il cast di stringa MyClass
, qualcosa come myList.Contains((MyClass)"testType")
. Tuttavia penso che mi piace la risposta di Lo Scrum Meister meglio :)
hhmmm ... sicuramente più semplice che la mia;) – IAbstract
P.S. assicurati di aggiungere l'utilizzo di System.Linq; all'inizio del file .cs - questo mi ha fatto inciampare alcune volte :-) –
Molto elegante. Questo sta sicuramente andando nella mia libreria di frammenti di codice. Realmente mi sono reso conto dopo aver postato la domanda che le mie stringhe di tipo devono essere uniche nel mio elenco, quindi ho finito per usare un 'Dictionary'. –
Ozzah