2010-04-22 17 views
5
private static Dictionary<Type, Func<string, object>> _parseActions 
            = new Dictionary<Type, Func<string, object>> 
    { 
     { typeof(bool), value => {Convert.ToBoolean(value) ;}} 
    }; 

Powyższe daje błądDlaczego jeden Func ważny, a druga (prawie identyczne) nie

Error 14 Nie wszystkie ścieżki kodu zwracają wartość w wyrażeniu lambda typu „System.Func < string, obiekt > '

Jednak poniższe informacje są w porządku.

private static Dictionary<Type, Func<string, object>> _parseActions 
            = new Dictionary<Type, Func<string, object>> 
    { 
     { typeof(bool), value => Convert.ToBoolean(value) } 
    }; 

Nie rozumiem różnicy między tymi dwoma. Myślałem, że dodatkowe nawiasy klamrowe w przykładzie 1 pozwolą nam używać wielu linii w funkcji anon, więc dlaczego mają wpływ na znaczenie kodu?

Odpowiedz

16

Pierwsza wykorzystuje blok kodu, który będzie tylko zwrócić wartość, jeśli używasz return kluczowe:

value => { return Convert.ToBoolean(value); } 

drugim, jest tylko wyrazem nie wymaga wyraźnej return.

+0

Tak, wysłałem pytanie, po czym spojrzał na nią innym Oooo 30 sekund zanim zdałem sobie sprawę, mój błąd :) wiwaty – gingerbreadboy

2

Pierwszy, do którego nie zwracasz niczego, i musisz jawnie zwrócić wartość, ponieważ masz ją owiniętą, gdzie druga z nich niejawnie zwraca wartość.

Aby rozwiązać to zrobić

private static Dictionary<Type, Func<string, object>> _parseActions = new Dictionary<Type, Func<string, object>> 
{ 
    { typeof(bool), value => { return Convert.ToBoolean(value) ;}} 
}; 
Powiązane problemy