【问题标题】:Custom IEqualityComparer<T> for HashSet and other Objects用于 HashSet 和其他对象的自定义 IEqualityComparer<T>
【发布时间】:2014-06-16 03:24:48
【问题描述】:

我正在使用 LINQ 并使用多个对象进行分组。这些对象之一是 HashSet。

var group = map.GroupBy(m => new{m.Item2.Clients,m.Item3,m.Item2.StartTimeID});

m.Item2.ClientCampaigns 是 HashSet 类型, m.Item3 是一个单独的类,用于 GetHashCode 和 Equals 方法 m.Item2.StartTimeId 是 INT 类型

现在我需要通过传入自定义 IEquality 比较器对这三个进行 GROUP BY 我猜?

如果只是 HasSet,我可以使用 HashSet&lt;ClientCampaign&gt;.CreateSetComparer() 作为 GroupBy 方法中的第二个参数。

在这种情况下,我应该使用什么?

【问题讨论】:

  • 如果您可以让多个实例的成员 Item2 指向完全相同的 ClientCampaigns 实例,那么这将按照您的方式工作。您可能需要对第 3 项成员执行相同操作。如果对象引用了完全相同的实例,则它们将被视为“相等”。

标签: c# linq group-by hashset iequalitycomparer


【解决方案1】:

我解决了! 我创建了一个包含所有参数的新类,我正在分组。 我创建了一个从 IEqualityComparer 扩展的新自定义比较器。 此自定义比较器必须分别具有 public bool Equalspublic int GetHashCode 方法。 然后,我在代码中的 GroupBy 子句中使用了这个比较器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2012-04-06
    相关资源
    最近更新 更多