Saya mencoba menggunakan .Contains()
fungsi tersebut pada daftar objek khusus
Ini daftarnya:
List<CartProduct> CartProducts = new List<CartProduct>();
Dan 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;
}
}
Jadi saya mencoba menemukan produk keranjang serupa di dalam daftar:
if (CartProducts.Contains(p))
Tapi itu mengabaikan cartproducts serupa dan saya sepertinya tidak tahu apa yang diperiksa - ID? atau semuanya?
Terima kasih sebelumnya! :)
GetHashCode()
?Jika Anda menggunakan .NET 3.5 atau yang lebih baru, Anda dapat menggunakan metode ekstensi LINQ untuk mendapatkan pemeriksaan "berisi" dengan
Any
metode ekstensi:if(CartProducts.Any(prod => prod.ID == p.ID))
Ini akan memeriksa keberadaan produk yang di
CartProducts
dalamnya memiliki ID yang cocok dengan IDp
. Anda dapat meletakkan ekspresi boolean apa pun setelah=>
untuk melakukan pemeriksaan.Ini juga memiliki keuntungan bekerja untuk kueri LINQ-to-SQL serta kueri dalam memori, di mana
Contains
tidak.sumber
Ia memeriksa untuk melihat apakah objek tertentu terdapat dalam daftar.
Anda mungkin lebih baik menggunakan metode Temukan dalam daftar.
Berikut contohnya
List<CartProduct> lst = new List<CartProduct>(); CartProduct objBeer; objBeer = lst.Find(x => (x.Name == "Beer"));
Semoga membantu
Anda juga harus melihat LinQ - mungkin berlebihan untuk ini, tetapi alat yang berguna tetap ...
sumber
Equals()
metode diubah karena alasan apa pun)Secara default jenis referensi memiliki persamaan referensi (yaitu dua contoh hanya sama jika mereka adalah objek yang sama).
Anda perlu mengganti
Object.Equals
(danObject.GetHashCode
mencocokkan) untuk menerapkan persamaan Anda sendiri. (Dan ini merupakan praktik yang baik untuk mengimplementasikan kesetaraan==
,, operator.)sumber
CartProduct
objek berperilaku berbeda di tempat yang berbeda.Contains()
". Setuju yangFind()
dapat menyelesaikan masalah, meskipun saya akan menyarankan memiliki metode sama yang sesuai mungkin lebih berguna dalam banyak kasus lain, karena OP tidak melihat bahwa referensi untuk dua contoh dari entitas yang sama berbeda.Anda perlu membuat objek dari daftar Anda seperti:
List<CartProduct> lst = new List<CartProduct>(); CartProduct obj = lst.Find(x => (x.Name == "product name"));
Objek itu mendapatkan nilai yang terlihat dengan menelusuri propertinya: x.name
Kemudian Anda dapat menggunakan metode Daftar seperti Berisi atau Hapus
if (lst.Contains(obj)) { lst.Remove(obj); }
sumber
Menerapkan
override Equals()
danGetHashCode()
public class CartProduct { public Int32 ID; ... public CartProduct(Int32 ID, ...) { this.ID = ID; ... } public override int GetHashCode() { return ID; } public override bool Equals(Object obj) { if (obj == null || !(obj is CartProduct)) return false; else return GetHashCode() == ((CartProduct)obj).GetHashCode(); } }
bekas:
if (CartProducts.Contains(p))
sumber
Jika Anda ingin mengontrol hal ini, Anda perlu mengimplementasikan [antarmuka IEquatable] [1]
[1]: http: // Metode ini menentukan kesetaraan dengan menggunakan pembanding kesetaraan default, seperti yang didefinisikan oleh implementasi objek dari metode IEquatable.Equals untuk T (jenis nilai dalam daftar).
sumber