Ich versuche, die .Contains()
Funktion für eine Liste benutzerdefinierter Objekte zu verwenden
Dies ist die Liste:
List<CartProduct> CartProducts = new List<CartProduct>();
Und die CartProduct
:
public class CartProduct
{
public Int32 ID;
public String Name;
public Int32 Number;
public Decimal CurrentPrice;
/// <summary>
///
/// </summary>
/// <param name="ID">The ID of the product</param>
/// <param name="Name">The name of the product</param>
/// <param name="Number">The total number of that product</param>
/// <param name="CurrentPrice">The currentprice for the product (1 piece)</param>
public CartProduct(Int32 ID, String Name, Int32 Number, Decimal CurrentPrice)
{
this.ID = ID;
this.Name = Name;
this.Number = Number;
this.CurrentPrice = CurrentPrice;
}
public String ToString()
{
return Name;
}
}
Also versuche ich ein ähnliches Warenkorbprodukt in der Liste zu finden:
if (CartProducts.Contains(p))
Aber es ignoriert ähnliche Warenkorbprodukte und ich scheine nicht zu wissen, was es überprüft - die ID? oder alles?
Danke im Voraus! :) :)
GetHashCode()
?Wenn Sie .NET 3.5 oder höher verwenden, können Sie LINQ-Erweiterungsmethoden verwenden, um eine "enthält" -Prüfung mit der
Any
Erweiterungsmethode zu erreichen :Dadurch wird geprüft, ob ein Produkt vorhanden
CartProducts
ist, dessen ID mit der ID von übereinstimmtp
. Sie können einen beliebigen booleschen Ausdruck nach dem setzen=>
, um die Prüfung durchzuführen.Dies hat auch den Vorteil, dass sowohl für LINQ-zu-SQL-Abfragen als auch für In-Memory-Abfragen gearbeitet werden kann, wo
Contains
dies nicht der Fall ist.quelle
Es wird geprüft, ob das bestimmte Objekt in der Liste enthalten ist.
Verwenden Sie möglicherweise besser die Suchmethode in der Liste.
Hier ist ein Beispiel
hoffentlich hilft das
Sie sollten sich auch LinQ ansehen - Overkill dafür vielleicht, aber dennoch ein nützliches Tool ...
quelle
Equals()
Methode aus irgendeinem Grund geändert wurde)Standardmäßig haben Referenztypen Referenzgleichheit (dh zwei Instanzen sind nur dann gleich, wenn sie dasselbe Objekt sind).
Sie müssen überschreiben
Object.Equals
(undObject.GetHashCode
übereinstimmen), um Ihre eigene Gleichheit zu implementieren. (Und es ist dann eine gute Praxis, einen Gleichheitsoperator zu implementieren==
.)quelle
CartProduct
Objekte an verschiedenen Orten unterschiedlich verhält.Contains()
" zu sein. Stimmen Sie zu, dassFind()
das Problem gelöst werden könnte, obwohl ich vorschlagen würde, dass eine geeignete Gleichheitsmethode in vielen anderen Fällen nützlicher ist, da das OP nicht feststellte, dass die Referenzen für zwei Instanzen derselben Entität unterschiedlich waren.Sie müssen ein Objekt aus Ihrer Liste erstellen, wie:
Dieses Objekt erhält die Suche nach dem gesuchten Wert anhand seiner Eigenschaften: x.name
Dann können Sie List-Methoden wie Contains oder Remove verwenden
quelle
Implementieren
override Equals()
undGetHashCode()
gebraucht:
quelle
Wenn Sie die Kontrolle darüber haben möchten, müssen Sie die [IEquatable-Schnittstelle] [1] implementieren.
[1]: http: // Diese Methode ermittelt die Gleichheit mithilfe des Standardgleichheitsvergleichs, der durch die Implementierung der IEquatable.Equals-Methode für T (den Wertetyp in der Liste) durch das Objekt definiert wird.
quelle