class p {
public string Name { get; set; }
public int Age { get; set; }
};
static List<p> ll = new List<p>
{
new p{Name="Jabc",Age=53},new p{Name="Mdef",Age=20},
new p{Name="Exab",Age=45},new p{Name="G123",Age=19}
};
protected static void SortList()
{
IComparer<p> mycomp = (x, y) => x.Name.CompareTo(y.Name); <==(Line 1)
ll.Sort((x, y) => x.Name.CompareTo(y.Name));<==(Line 2)
}
का उपयोग कर आईसीओएमपेयर यहां List.sort पैरामीटर के रूप में IComparer<p>
की अपेक्षा करता है। और यह लैम्ब्डा साथ काम करता है के रूप में लाइन 2 में दिखाया गया है लेकिन जब मैं पंक्ति 1 में के रूप में करने की कोशिश, मैं इस त्रुटि मिलती है:लैम्ब्डा अभिव्यक्ति
Cannot convert lambda expression to type System.Collections.Generic.IComparer' because it is not a delegate type
मैं पिछले कुछ समय से इस जांच की लेकिन मैं अभी भी समझ में नहीं आता यह। शायद आईसीओएमपेयर की मेरी समझ काफी अच्छी नहीं है। क्या कोई मुझे हाथ दे सकता है?
तुलना कहां से/कैसे है? –
@duluca इसे 'सिस्टम' नेमस्पेस में 'सार्वजनिक प्रतिनिधि int तुलना (टी एक्स, टी वाई)' के रूप में परिभाषित किया गया है (.net 4 से पहले संस्करणों में 'in'' घटाएं)। यह दस्तावेज [यहां] (http://msdn.microsoft.com/en-us/library/tfakywbh%28v=vs.100%29.aspx) है। –
sepp2k
'तुलना करें()' एक संस्कृति विशिष्ट तुलना है। कुछ 'll.sort ((x, y) => स्ट्रिंग। कॉम्पारेऑर्डिनल (x.Name, y.Name))' कुछ बेहतर हो सकता है। –