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

¿Qué me falta?Acerca de la lista de clasificación y delegados y expresiones lambda Func cosas

error 2 Argumento 1: no se puede convertir de 'System.Func' a 'System.Collections.Generic.IComparer'

de error 1 El partido mejor método sobrecargado para 'System.Collections.Generic.List. Ordenar (System.Collections.Generic.IComparer)' tiene algunos argumentos no válidos

Cuando tengo

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

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

funciona bien. ¿No son lo mismo?

Respuesta

11

Func es el tipo de delegado incorrecto. Puede utilizar cualquiera de estos:

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

Este es un buen ejemplo de que el compilador de ser más listo que tú (o nosotros, ya que habría necesitado para mira esto). Solo deje que lo resuelva (escribiendo implícitamente en lambdas) en lugar de tratar de decirle explícitamente cosas que ya debería saber. – Servy

0

Debido a que necesita para pasar un System.Comparison<T>, no un Func<something>. Suelta el new Func... y debería funcionar.

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

También puede probar:

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

Retire la new Func<...>

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

¿por qué usar var? – haxxoromer

+0

Solo mi estilo de codificación. Es equivalente a 'List test = new List ();' –

+0

Es decir, es mejor usar var test = new List en lugar de List test = new List (); – haxxoromer

Cuestiones relacionadas