2012-07-23 9 views
6
List<bool> test = new List<bool>(); 
test.Sort(new Func<bool, bool, int>((b1, b2) => 1)); 

मुझे क्या याद आ रही है?सूची सॉर्टिंग और प्रतिनिधियों और लैम्ब्डा अभिव्यक्तियों के बारे में Func stuff

त्रुटि 2 तर्क 1: 'System.Func' से 'System.Collections.Generic.IComparer'

त्रुटि 1 'System.Collections.Generic.List लिए अच्छी अतिभारित विधि मैच के लिए परिवर्तित नहीं कर सकते। क्रमबद्ध करें (System.Collections.Generic.IComparer) जब मैं

private int func(bool b1, bool b2) 
{ 
    return 1; 
} 

private void something() 
{ 
    List<bool> test = new List<bool>(); 
    test.Sort(func); 
} 

यह ठीक काम करता है 'में कुछ ऐसी अमान्य तर्क

है। क्या वे एक ही बात नहीं हैं?

उत्तर

11

Func गलत प्रतिनिधि प्रकार है। आप इन दोनों में से किसी का उपयोग कर सकते हैं:

test.Sort((b1, b2) => 1); 
test.Sort(new Comparison<bool>((b1, b2) => 1)); 
+2

इस संकलक आप अधिक चालाक होने का एक अच्छा उदाहरण है (या हमें, जैसा कि मैंने करने की जरूरत है | इसे देखो)। बस इसे स्पष्ट रूप से बताएं कि इसे पहले से ही जानना चाहिए, इसे स्पष्ट रूप से बताने की कोशिश करने के बजाय इसे लैम्बडास में निहित टाइपिंग के माध्यम से समझने दें। – Servy

0

क्योंकि आप इसे एक System.Comparison<T>, नहीं एक Func<something> पारित करने के लिए की जरूरत है। new Func... ड्रॉप करें और इसे काम करना चाहिए।

test.Sort((b1, b2) => !b1 && b2 ? -1 : b1 && !b2 ? +1 : 0); 
0

तुम भी कोशिश कर सकते हैं:

test.Sort(delegate(bool b1,bool b2){return 1;}); 
0

निकालें new Func<...>

var test = new List<bool>(); 
test.Sort((a, b) => 1); 
+0

var का उपयोग क्यों करें? – haxxoromer

+0

बस मेरी कोडिंग शैली। इसके विपरीत 'सूची परीक्षण = नई सूची (); ' –

+0

मेरा मतलब है कि सूची परीक्षण = नई सूची () की बजाय var test = new list का उपयोग करना बेहतर है। – haxxoromer

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