c# - 检查相同的对象
问题描述
我怎么不能检查对象是否相等?我有 2 个类存储对象(带有类产品列表),我想找到共同产品,但是当我检查相同的 2 个产品对象时,它们并不相同。
class Storage
{
public List<Product> many_product;
public Storage(List<Product> el)
{
this.many_product.AddRange(el);
}
public static Storage mutual_products(Storage a, Storage b)
{
Storage mutal_products = new Storage();
foreach (var prod in a.many_product)
if (b.many_product.Contains(prod))// return false, but in list is a mutual product
{
mutal_products.many_product.Add(prod);
}
return mutal_products;
}
}
当我用 if(prod1==prod2)//return false 检查相同的产品时也是如此
解决方案
您的产品类应该实现IEquatable<Product>
接口以使该Contains
方法正常工作。例如:
public class Product : IEquatable<Product>
{
public string Name { get; set; }
public double Price { get; set; }
public bool Equals(Product other)
{
return Name.Equals(other.Name)
&& Price.Equals(other.Price);
}
}
如果您使用的是 .NET 5 和 C# 9,则可以将您的Product
类设为record
. 那么就不需要IEquatable<Product>
显式地实现了。
推荐阅读
- assembly - 看不懂 armv7 adr_l 指令示例
- swiftui - SwiftUI 弹出临时警报
- android - Flutter Firebase 云消息传递 onBackgroundMessage
- javascript - 联系表格重定向延迟
- java - 在 Fragment 中使用 RecyclerView 而不是 Activity 会导致 E/RecyclerView: No adapter attach; 跳过布局错误
- python - 为什么我的迭代计数从 2 而不是 1 开始?
- r - 如何将多列合并为一列并省略0?
- python - 如何使用 Shift() 和 Apply() 函数来遍历行?
- flutter - 如何在颤动中找到或创建 private.pem 和 public.pem
- laravel - 将变量(不是属性)传递给 laravel 工厂创建方法