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

qui précède donne une erreurPourquoi un Func valide et l'autre (presque identique) ne

Erreur 14 Tous les chemins de code renvoient une valeur dans l'expression lambda de type « System.Func < chaîne de caractères, objet '

Cependant, ce qui suit est correct.

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

Je ne comprends pas la différence entre les deux. Je pensais que les accolades supplémentaires dans l'exemple 1 doivent nous permettre d'utiliser plusieurs lignes dans la fonction anon alors pourquoi ont-elles affecté la signification du code?

Répondre

16

Le premier utilise un bloc de code, qui ne renverra une valeur si vous utilisez le mot-clé return:

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

Le deuxième, juste une expression ne nécessite pas d'return explicite.

+0

Oui, j'ai posté la question, puis regarda pendant une autre ooooh 30 secondes avant que je réalise mon erreur :) hourras – gingerbreadboy

2

Le premier vous ne renvoyez rien et vous devez explicitement retourner une valeur puisque vous l'avez enveloppée, où la seconde vous renvoie implicitement une valeur.

Pour résoudre ce problème ne

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