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

Czego mi brakuje?O sortowaniu listy i delegatach i wyrażeń lambda Func stuff

Błąd 2 Argument 1: nie można przekonwertować z 'System.Func' do 'System.Collections.Generic.IComparer'

Error 1 Najlepszym przeciążona metoda dopasowanie dla „System.Collections.Generic.List. sort (System.Collections.Generic.IComparer)”ma pewne nieprawidłowe argumenty

Kiedy mam

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

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

to działa dobrze. Czy to nie to samo?

Odpowiedz

11

Func jest nieprawidłowym typem delegata. można skorzystać z jednego z nich:

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

Jest to dobry przykład kompilator będącego mądrzejszy od ciebie (lub nam, jak bym musiał sprawdź to). Po prostu niech to zrozumie (poprzez niejawne pisanie w lambdach), zamiast próbować jawnie powiedzieć to, co powinno już wiedzieć. – Servy

0

Bo trzeba zdać on System.Comparison<T>, a nie Func<something>. Upuść new Func... i powinno działać.

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

Możesz też spróbować:

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

Zdjąć new Func<...>

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

dlaczego warto używać var? – haxxoromer

+0

Tylko mój styl kodowania. Odpowiada to "List test = nowa lista ();" –

+0

Mam na myśli, czy lepiej użyć testu var = nowa lista zamiast listy test = nowa lista (); – haxxoromer