2009-10-06 12 views
6

मैं दो स्ट्रिंग फ़ील्ड पर आईसीओम्पेर्बल इंटरफ़ेस को कैसे कार्यान्वित करूं?दो स्ट्रिंग फ़ील्ड पर आईसीओम्पेरबल इंटरफेस को कार्यान्वित करना

नीचे व्यक्ति वर्ग उदाहरण का उपयोग करना। यदि व्यक्ति वस्तुओं को सूची में जोड़ा जाता है। मैं उपनाम के आधार पर पहली बार फिर से नाम कैसे सूचीबद्ध करूं?

Class Person 
{ 
    public string Surname { get; set; } 
    public string Forname { get; set; } 
} 

कुछ पसंद है? :

myPersonList.Sort(delegate(Person p1, Person p2) 
{ 
    return p1.Surname.CompareTo(p2. Surname); 
}); 

उत्तर

9

या आप इस प्रकार की सूची को सॉर्ट कर सकते हैं:

public int CompareTo(Person other) 
{ 
    int result = this.Surname.CompareTo(other.Surname); 
    if (result == 0) 
     result = this.Forname.CompareTo(other.Forname); 
    return result; 
} 

संपादित के रूप में मार्क ने टिप्पणी की, आप:

myPersonList.Sort(delegate(Person p1, Person p2) 
{ 
    int result = p1.Surname.CompareTo(p2.Surname); 
    if (result == 0) 
     result = p1.Forname.CompareTo(p2.Forname); 
    return result; 
}); 

वैकल्पिक रूप से आप Person इस विधि के साथ IComparable<Person> लागू हो सकता था तय कर सकते हैं कि आपको नल की जांच करने की आवश्यकता है। यदि ऐसा है, तो आपको यह तय करना चाहिए कि नल को ऊपर या नीचे क्रमबद्ध किया जाना चाहिए या नहीं। इस तरह कुछ:

if (p1==null && p2==null) 
    return 0; // same 
if (p1==null^p2==null) 
    return p1==null ? 1 : -1; // reverse this to control ordering of nulls 
+0

एक उत्पादन कार्यान्वयन में शून्य मान के लिए जाँच करने के लिए ... –

+0

के बारे में .Surname में nulls के लिए जाँच क्या याद रखें? – mayu

+0

@Tymec, बस उसी पैटर्न को दोहराएं जैसा कि पी 1 और पी 2 के लिए उपयोग किया जाता है, लेकिन पी 1 के साथ। उपनाम और पी 2। नाम। –

1

इसे आजमाएं?

int surnameComparison = p1.Surname.CompareTo(p2.Surname); 

if (surnameComparison <> 0) 
    return surnameComparison; 
else 
    return p1.Forename.CompareTo(p2.Forename); 
संबंधित मुद्दे