gpt4 book ai didi

c# - 此代码返回不同的值。但是,我想要的是返回一个强类型集合而不是匿名类型

转载 作者:可可西里 更新时间:2023-11-01 07:43:54 26 4
gpt4 key购买 nike

我有以下代码:

var foo = (from data in pivotedData.AsEnumerable()
select new
{
Group = data.Field<string>("Group_Number"),
Study = data.Field<string>("Study_Name")
}).Distinct();

正如预期的那样,这将返回不同的值。但是,我想要的是返回一个强类型集合而不是匿名类型,所以当我这样做时:

var foo = (from data in pivotedData.AsEnumerable()
select new BarObject
{
Group = data.Field<string>("Group_Number"),
Study = data.Field<string>("Study_Name")
}).Distinct();

这不会返回不同的值,它会返回所有值。有没有办法对实际对象执行此操作?

最佳答案

对于 Distinct() (以及许多其他 LINQ 功能)工作,被比较的类(在您的示例中为 BarObject)必须实现 implement Equals()GetHashCode() ,或者提供单独的 IEqualityComparer<T>作为 Distinct() 的参数.

许多 LINQ 方法利用 GetHashCode()为了性能,因为在内部他们会使用类似 Set<T> 的东西保存唯一项,它使用散列进行 O(1) 查找。另外,GetHashCode()可以快速告诉您两个对象可能是否等价,哪些绝对不等价-只要GetHashCode()当然是正确实现。

所以你应该让所有你打算在 LINQ 实现中比较的类 Equals()GetHashCode()为了完整性,或创建一个单独的 IEqualityComparer<T>实现。

关于c# - 此代码返回不同的值。但是,我想要的是返回一个强类型集合而不是匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336275/

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