gpt4 book ai didi

c# - IEqualityComparer 和单例

转载 作者:太空狗 更新时间:2023-10-29 21:24:43 26 4
gpt4 key购买 nike

我想知道是否有可能在 Distinct 中使用单例作为比较器对象??

假设我有一个元素列表,我需要在该列表上使用不同的函数。通常我会这样做

var result  = list.Distinct(new ListElementComparer);

ListElementComparer 是一个实现 IEqualityComparer 接口(interface)的类。但是,让我们假设我会经常使用上面提到的代码,例如那样。

List<List<Element>> elementList = new List<List<Elements>>();
List<List<Element>> resultList new List<List<Element>>();

foreach(var element in elementList )
resultList.AddRange(element.Distinct(new ListElementComparer() ) );

因此,您可以创建 ListElementComparer 的对象很多次。在这种情况下,在每次迭代中使用单例而不是创建 ListElementComparer 有什么意义吗?如果我使用单例,distinct 方法会起作用吗??

最佳答案

是的,绝对可以,它适用于单例:

public class ListElementComparer : IEqualityComparer<List<Element>>
{
public static ListElementComparer Instance { get { return instance; } }

private static readonly ListElementComparer instance =
new ListElementComparer();

private ListElementComparer() {}

// Implement IEqualityComparer<List<Element>> here
}

然后:

resultList.AddRange(element.Distinct(ListElementComparer.Instance);

请注意,您可以稍微避免整个循环:

var resultList = elementList
.SelectMany(x => x.Distinct(ListElementComparer.Instance))
.ToList();

(这不适用于最初声明的类型,因为您的示例代码也不太适用……但类似的东西会。)

关于c# - IEqualityComparer 和单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5640071/

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