Przeczytałem to pytanie (What is the scope of a lambda variable in C#?)Dlaczego zakres zmienny Lambda istnieje poza zapytaniem LINQ?
Ale chodzi o zakres zmienny Lambda wewnątrz kwerendy LINQ.
Teraz moje pytanie
Powiedzmy mam bardzo prostej kwerendy LINQ.
var Foo = FoobBar.Select(x => x);
var x = somefunction();
Kompilator mówi: A local variable 'x' cannot be declared in this scope because it would give a different meaning to 'x', which is already used in a 'child' scope to denote something else
.
Dlaczego tak jest? Czy zmienna Lambda nie powinna przestać istnieć po zakończeniu zapytania LINQ?
EDYCJA: Po przeczytaniu odpowiedzi doszedłem do wniosku, że jest to zewnętrzna strona x
(zwrócona z funkcji), której zakres obejmuje wewnątrz zapytania LINQ.
Po przeczytaniu wszystkich odpowiedzi doszedłem do wniosku, że jest odwrotnie. zakres zmiennej zewnętrznej istnieje wewnątrz kwerendy LINQ. –
I na odwrót ;-) Język nie byłby przyjazny dla refaktoryzacji, gdyby pozwolił kodowi skompilować tylko dlatego, że zmienna powodująca konflikt ('var x = somefunction();) jest w drugiej linii, a następnie gdy przesuwasz drugą linię w pierwszej linii, ku swojemu rozczarowaniu, nie skompilowałaby się więcej. C# działa z mechanizmem zapobiegawczym, nie pozwala na 'var x = someFunction()' do kompilowania nawet w drugim wierszu, ponieważ możesz ponownie zaimplementować swój kod w dowolnym momencie i umieścić go w pierwszej linii później. Żyjemy w epoce, w której kod refaktoryzujący się jest normą –