Hole eine Liste der eindeutigen Werte in List<T> in c#
So, sagen, ich habe so etwas wie die folgenden:
public class Element
{
public int ID;
public int Type;
public Properties prorerty;
...
}
und die
public class Properties
{
public int Id;
public string Property;
...
}
und ich haben eine Liste mit diesen:
List Elements = new List();
Was wäre der sauberste Weg, um eine Liste aller eindeutigen Werte in der prorerty Spalte in der Element-Klasse? Ich meine, ich könnte die Liste Durchlaufen und alle Werte, die nicht Duplikate an eine andere Liste von strings, aber das scheint dreckig und ineffizient. Ich habe das Gefühl, es gibt einige Magische Linq-Konstruktion, werden dazu in einer Linie, aber ich habe nicht in der Lage zu kommen mit etwas.
- stackoverflow.com/questions/11447766/...
- Sie nicht Sie sich eher die Verwendung von set
InformationsquelleAutor Mykhalik | 2013-02-11
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: müssen Sie das überschreiben
.Equals
und.GetHashCode()
IEqualityComparer
. 🙂System.String
für, die.IEqualityComparer<Element>
im Element ist ziemlich ungewöhnlich. Entweder erstellen Sie eineElementComparer
Klasse oder implementierenIComparable<Element>
im Element.Und stellen Sie sicher, dass Sie überschrieben
.Equals()
und.GetHashCode()
Methoden.Oder, wenn Sie direkt von strings
Properties
:Wenn Sie brauchen, string-Feldern auf den
Properties
Feld, und wenn Sie wissen, dieProperties
Feldprorerty
ist nienull
, verwenden Sie einfachWenn es eine chance
prorerty
null sein kann, behandeln die situation, in der der lambda-Ausdruck.Dies wird mit der Standard-Gleichheit comparer for
String
was ist ein Ordnungszahl Vergleich unabhängig von Kultur-und Kleinschreibung.mein Beispiel arbeiten von LINQPad (C# Programm)
Nicht einfacher, verwenden Sie eine der Vorgehensweisen, die nachfolgend dargestellt 🙂 ? Sie können einfach gruppieren Sie Ihre domain Objekte von einigen Taste, und wählen Sie FirstOrDefault wie unten.
Dies ist eine Kopie meiner Antwort auf ähnliche Frage hier:
Einzigartige Werte - originelle Antwort
Weitere interessante option ist, um einige Comparer-adapter, der Sie Domänen-Objekt und erstellt andere Objekt der Comparer verwenden/arbeiten mit out-of-the-box. Auf der Basis der comparer können Sie Ihre benutzerdefinierten linq-Erweiterungen wie im Beispiel unten. Hoffe es hilft 🙂
Benutzerdefinierten Vergleichs-adapter:
Benutzerdefinierte linq-extension (definition von DistinctBy Erweiterung Methode):
Definition der domain-Klasse benutzt, in der test-Fall: