C# SequenceEqual在下面的比较类中不起作用
我试图比较以下数据。为什么SequenceEqual在下面不起作用?我创建了两个列表类,并希望进行比较C# SequenceEqual在下面的比较类中不起作用,c#,generics,asp.net-core,.net-core,C#,Generics,Asp.net Core,.net Core,我试图比较以下数据。为什么SequenceEqual在下面不起作用?我创建了两个列表类,并希望进行比较 public partial class Product { public int ProductId { get; set; } public string ProductName { get; set; } public string ProductDescription { get;
public partial class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductDescription { get; set; }
}
List<Product> product1 = new List<Product>();
List<Product> product2 = new List<Product>();
product1.Add(new Product
{
ProductId = 1,
ProductName = "TV",
ProductDescription = "Television Set"
});
product2.Add(new Product
{
ProductId = 1,
ProductName = "TV",
ProductDescription = "Television Set"
});
if (product1.SequenceEqual(product2))
{
Console.WriteLine("equal data");
}
else
{
Console.WriteLine("Not equal data");
}
公共部分类乘积
{
public int ProductId{get;set;}
公共字符串ProductName{get;set;}
公共字符串ProductDescription{get;set;}
}
List product1=新列表();
List product2=新列表();
产品1.添加(新产品)
{
ProductId=1,
ProductName=“电视”,
ProductDescription=“电视机”
});
产品2.添加(新产品)
{
ProductId=1,
ProductName=“电视”,
ProductDescription=“电视机”
});
if(product1.SequenceEqual(product2))
{
控制台写入线(“相等数据”);
}
其他的
{
控制台写入线(“不相等数据”);
}
SequenceEqual
比较两个序列,以查看是否包含相同的对象。在你的情况下,他们没有。它们包含不同的产品
引用
如果将代码更改为在每个列表中使用相同的产品
,则SequenceEqual
将返回'true'
var product = new Product
{
ProductId = 1,
ProductName = "TV",
ProductDescription = "Television Set"
};
product1.Add(p);
product2.Add(p);
if (product1.SequenceEqual(product2))
{
Console.WriteLine("equal data");
}
else
{
Console.WriteLine("Not equal data");
}
为什么??因为在本例中,列表包含相同的对象
有关如何比较两个序列的更多信息,请参见SequenceEqual
如果希望SequenceEqual
在Product
类的属性相同时返回true,则需要重写Product
类上的Equals
方法
编辑
正如其他人所提到的,更好的做法是实现接口,而不是直接重写
Equals
方法。SequenceEqual
比较这两个序列以查看是否包含相同的对象。在你的情况下,他们没有。它们包含不同的产品
引用
如果将代码更改为在每个列表中使用相同的产品
,则SequenceEqual
将返回'true'
var product = new Product
{
ProductId = 1,
ProductName = "TV",
ProductDescription = "Television Set"
};
product1.Add(p);
product2.Add(p);
if (product1.SequenceEqual(product2))
{
Console.WriteLine("equal data");
}
else
{
Console.WriteLine("Not equal data");
}
为什么??因为在本例中,列表包含相同的对象
有关如何比较两个序列的更多信息,请参见SequenceEqual
如果希望SequenceEqual
在Product
类的属性相同时返回true,则需要重写Product
类上的Equals
方法
编辑
正如其他人提到的,更好的做法是实现接口,而不是直接重写
Equals
方法。默认情况下,SequenceEqual
方法使用默认比较器比较集合中的元素,该比较器进行引用比较-请参阅,尤其是示例部分
如果要比较对象的数据而不是引用,有两个选项(我从上面链接的页面中选择):
- 让
类实现Product
接口;或IEquatable
- 创建一个实现
接口的单独类,并使用以IEqualityComparer
为实例的IEqualityComparer
重载SequenceEqual
我建议您阅读文档页面,了解有关如何实现这两个选项的更多详细信息和示例。默认情况下,
SequenceEqual
方法使用默认比较器比较集合中的元素,该比较器进行参考比较-请参阅,尤其是示例部分
如果要比较对象的数据而不是引用,有两个选项(我从上面链接的页面中选择):
- 让
类实现Product
接口;或IEquatable
- 创建一个实现
接口的单独类,并使用以IEqualityComparer
为实例的IEqualityComparer
重载SequenceEqual