2011-04-12 13 views
5

मैं सोच रहा था कि सिंगलटन का उपयोग करने के लिए तुलना करने की संभावना है उदाहरण के लिए उदाहरण के लिए अलग ??IEqualityComparer और सिंगलटन

मान लें कि मेरे पास तत्व की एक सूची है और मुझे उस सूची में अलग-अलग फ़ंक्शन का उपयोग करने की आवश्यकता है। आम तौर पर मुझे लगता है कि इस तरह से

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 बनाने के एकल गीत का उपयोग करने का कोई बिंदु है? यदि मैं सिंगलटन का उपयोग करता हूं तो क्या विशिष्ट विधि काम करेगी ??

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); 

ध्यान रखें कि आपके पूरे पाश कुछ हद तक बचा जा सकता है:

उत्तर

7

हाँ, बिल्कुल, यह ठीक एक सिंगलटन के साथ काम करेंगे

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

(यह मूल रूप से घोषित प्रकारों के साथ काफी काम नहीं करता है, क्योंकि आपका नमूना कोड काफी काम नहीं करता है ... लेकिन कुछ एस imilar होगा।)

संबंधित मुद्दे