gpt4 book ai didi

c# - SequenceEqual linq 组

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:43 26 4
gpt4 key购买 nike

我使用 c# 3.5 和 linq 编写了一个简单的程序。

我有课

public class Product
{
public Product()
{

}

public int RoleId { get; set; }
public int ObjectId { get; set; }
public bool Read { get; set; }

public override bool Equals(object obj)
{
return Equals((Product) obj);
}

public bool Equals(Product other)
{
return ObjectId == other.ObjectId && Read == other.Read;
}

}

我正在尝试比较列表。

List<Product> products = new List<Product>() 
{
new Product { RoleId = 1, ObjectId = 2, Read = false },
new Product { RoleId = 2, ObjectId = 1, Read = false },
new Product { RoleId = 1, ObjectId = 1, Read = true }
};

var groupedCustomerList = products.GroupBy(u => u.RoleId)
.Select(grp => grp.ToList()).ToList();

var firstGroup = groupedCustomerList.ElementAt(0);

List<Product> productsListSearch = new List<Product>()
{
new Product {ObjectId = 1, Read = true },
new Product {ObjectId = 2, Read = false }
};

var result= productsListSearch.SequenceEqual(firstGroup);

为什么结果不正确?我需要对元素进行分类?

最佳答案

它们不是顺序相等的,因为对象的顺序不同。如果您像这样更改 productsListSearch

List<Product> productsListSearch = new List<Product>() 
{
new Product {ObjectId = 2, Read = false }
, new Product {ObjectId = 1, Read = true }
};

SequenceEqual 将返回 True

Demo on ideone .

通常,您不应依赖 LINQ 生成的组中项目的顺序,除非您自己设置顺序:

var groupedCustomerList = products.GroupBy(u => u.RoleId)
.Select(grp => grp.OrderBy(p => ...).ToList()).ToList();

注意:您的 Product 类会覆盖 Equals 而不会覆盖 GetHashCode。如果您决定在散列集中使用 Product 或将其用作基于散列的字典的键,这将是有问题的。

关于c# - SequenceEqual linq 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17639317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com