Peut un C# expression lambda jamais de retour void?

J'ai la méthode suivante, et je veux savoir s'il ya quelque chose qui peut aller en place par défaut(void) ci-dessous car il y a une erreur de compilation, qui dit que nul n'est pas valide ici:

private void applyDefaultsIfNecessary(ApplicationConfiguration configuration)
{
    var defaults = new Dictionary<Predicate<ApplicationConfiguration>, Action<ApplicationConfiguration>>()
    {
       //{ rule, action } - if rule is true, execute action 
       { (c) => c.ConnectionString == null , (c) => c.ConnectionString = "foo" },
       { (c) => c.OutputExcelFilePath == null, (c) => c.ConnectionString = "bar" },
       { (c) => c.OutputDirectory == null, (c) => c.OutputDirectory = "baz" }

    };

    //Nothing to select, but we want to loop throough the dict and invoke action, if rule is true.
    //It is a pity there is no extension method called DoForEach on collections.
    defaults.Select((item) => item.Key.Invoke(configuration) ? item.Value.Invoke(configuration) : default(void)  );
}

Je me rends compte que je peux utiliser les if-else au lieu de l'opérateur ternaire (ou que je pourrais appeler un mannequin méthode de retour void). Aussi, Sélectionnez la méthode d'extension n'aime pas les lambdas de retour void. Il semble dire que le type ne peut pas être déduit, mais bien sûr, si je spécifier le type de ce genre, soit:

defaults.Select<ApplicationConfiguration, void>((item) => { if (item.Key.Invoke(configuration)) item.Value.Invoke(configuration); } );

J'étais curieux de savoir à partir d'un langage de conception de point de vue, pourquoi nous n'avons pas les expressions qui peuvent retourner void ou le type de données pour des variables est nulle.

"C'est dommage il n'y a pas de méthode d'extension appelé DoForEach sur les collections" il faut environ 3 lignes de code à ajouter une extenssion de IEnumerable de le faire
Êtes-vous sûr de ne pas dire de retourner la valeur NULL au lieu de void?
Rusanu: Lisez ceci, il y a une bonne raison qui n'a pas été ajoutés. À mon avis, c'est une honte qu'ils l'ont fait sur Liste<T>: blogs.msdn.com/ericlippert/archive/2009/05/18/...
En remplaçant par défaut(vide) avec la valeur null n'aide pas non plus. Le compilateur dit il n'y a pas de implict la conversion entre les nuls et non avenus
Sélectionnez doit retourner quelque chose. Vous ne pouvez pas utiliser une action, sélectionnez - vous de toujours avoir à faire, sélectionnez le retour d'un certain type T, et nul n'est "rien", de sorte qu'il ne fonctionne pas.

OriginalL'auteur Raghu Dodda | 2010-01-08