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

Die obige Abbildung zeigt einen FehlerWarum ist ein Func gültig ist und die andere (fast identisch) nicht

Error 14 Nicht alle Codepfade einen Wert in Lambda-Ausdruck des Typs zurückgeben ‚System.Func < string, objekt > '

Allerdings ist dies unten in Ordnung.

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

Ich verstehe nicht den Unterschied zwischen den beiden. Ich dachte, dass die zusätzlichen geschweiften Klammern in Beispiel1 es uns erlauben, mehrere Zeilen in der Anon-Funktion zu verwenden, also warum haben sie die Bedeutung des Codes beeinflusst?

Antwort

16

Der erste verwendet einen Codeblock, der nur einen Wert zurückgeben, wenn Sie die return Schlüsselwort:

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

Die zweite, nur ein Ausdruck benötigt keine explizite return zu sein.

+0

Yep zu beheben zu tun, habe ich geschrieben, die Frage, es sah dann für ein anderes ooooh 30 Sekunden, bevor ich meinen Fehler erkennen :) cheers – gingerbreadboy

2

Die erste, die Sie nichts zurückgeben, und Sie müssen explizit einen Wert zurückgeben, da Sie ein Wrapped haben, wo die zweite Sie implizit einen Wert zurückgeben.

es

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