Ils sont en conflit car une règle de C# est que deux utilisations du même nom simple ne peuvent pas être utilisées pour faire référence à deux choses différentes à l'intérieur du bloc englobant immédiatement l'un d'entre eux. Dans votre exemple, le nom simple "s" est utilisé pour signifier deux choses à l'intérieur du bloc entourant la déclaration de variable locale: cela signifie une variable locale, et un paramètre lambda. Que est ce qui est illégal. Je note que le message d'erreur que vous obtenez vous dit ceci:
A local variable named 's' cannot be declared in this scope because it
would give a different meaning to 's', which is already used in a
'child' scope to denote something else
C# ne vous permet pas d'avoir le même nom simple signifie deux choses dans le même bloc car cela fait une erreur de code ventral, difficile à modifier, dur lire, difficile à refactoriser, et difficile à déboguer. Il est préférable d'interdire cette mauvaise pratique de programmation plutôt que de l'autoriser et de risquer de causer des bogues parce que vous avez supposé que "s" signifie la même chose dans tout le bloc.
Lorsque le code n'est que de deux lignes, il est facile de se souvenir qu'il y a deux significations différentes pour s, mais quand il s'agit de centaines de lignes, ce n'est pas si simple.
Pour plus d'informations sur cette règle, voir:
http://blogs.msdn.com/b/ericlippert/archive/2009/11/02/simple-names-are-not-so-simple.aspx
Voir: http://blogs.msdn.com/b/ericlippert/archive/2009/11/02/simple-names-are -not-so-simple.aspx –