Pourquoi ne peut-on pas utiliser un paramètre ref ou out dans une expression lambda ?
J'ai rencontré cette erreur aujourd'hui et j'ai trouvé une solution de contournement mais j'étais quand même curieux de savoir pourquoi c'est une erreur de compilation.
CS1628: Impossible d'utiliser le paramètre 'parameter' en ref ou out à l'intérieur d'une méthode anonyme, d'une expression lambda ou d'une expression de requête
Voici un exemple simple :
private void Foo()
{
int value;
Bar(out value);
}
private void Bar(out int value)
{
value = 3;
int[] array = { 1, 2, 3, 4, 5 };
int newValue = array.Where(a => a == value).First();
}
0 votes
Il s'agit d'itérateurs, mais une grande partie du raisonnement dans ce post (également par Eric Lippert — il est bien membre de l'équipe de conception du langage) s'applique également aux lambdas: <blogs.msdn.com/ericlippert/archive/2009/07/13/…>
18 votes
Puis-je demander quelle était la solution de contournement que vous aviez trouvée ?
3 votes
Vous pouvez simplement déclarer une variable normale locale et travailler avec celle-ci, puis attribuer le résultat à la valeur par la suite... Ajoutez une instruction var tempValue = valeur; puis travaillez avec tempValue.
0 votes
L'article auquel fait référence le commentaire de @JoelCoehoorn peut maintenant être trouvé ici