c# – IEqualityComparer和singleton
发布时间:2020-12-15 08:43:41 所属栏目:百科 来源:网络整理
导读:我想知道是否有可能使用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(); (这不适用于最初声明的类型,因为您的示例代码也不能正常工作……但类似的东西会.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |