c# – IEqualityComparer和singleton

c# – IEqualityComparer和singleton,第1张

概述我想知道是否有可能使用singleton作为comparerObject,例如Distinct? 假设我有一个元素列表,我需要在该列表中使用不同的函数.通常我会这样做 var result = list.Distinct(new ListElementComparer); ListElementComparer是一个实现IEqualityComparer接口的类. 但是,让我们假设我将经常使用上 我想知道是否有可能使用singleton作为comparerObject,例如distinct?

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

var result  = List.distinct(new ListElementComparer);

ListElementComparer是一个实现IEqualityComparer接口的类.
但是,让我们假设我将经常使用上面提到的代码,例如这种方式.

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是否有任何意义?如果我使用singleton,那么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和singleton全部内容,希望文章能够帮你解决c# – IEqualityComparer和singleton所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251743.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存