Tôi đã đọc câu hỏi này (What is the scope of a lambda variable in C#?)Tại sao phạm vi biến Lambda tồn tại bên ngoài LINQ Query?
Nhưng đó là phạm vi biến Lambda bên trong LINQ Query.
Bây giờ câu hỏi của tôi
phép nói rằng tôi có một truy vấn LINQ rất đơn giản.
var Foo = FoobBar.Select(x => x);
var x = somefunction();
Trình biên dịch nói: 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
.
Tại sao vậy? Không nên biến Lambda tồn tại khi truy vấn LINQ kết thúc?
EDIT: Sau khi đọc câu trả lời tôi đi đến kết luận rằng bên ngoài của nó x
(được trả về từ hàm) có phạm vi mở rộng bên trong LINQ Query.
Sau khi đọc tất cả các câu trả lời tôi đi đến kết luận rằng nó theo cách khác vòng. phạm vi biến bên ngoài tồn tại bên trong truy vấn LINQ. –
Và một cách khác xung quanh quá ;-) Một ngôn ngữ sẽ không được tái cấu trúc thân thiện nếu nó cho phép mã biên dịch chỉ vì biến xung đột ('var x = somefunction();') là dòng thứ hai, và sau đó khi bạn di chuyển dòng thứ hai trên dòng đầu tiên, nhiều đến sự thất vọng của bạn, nó sẽ không biên dịch nữa. C# thực hiện một cơ chế trước khi làm trống, nó không cho phép 'var x = someFunction()' biên dịch ngay cả trên dòng thứ hai, vì bạn có thể nhân lại mã của bạn bất cứ lúc nào và đặt nó vào dòng đầu tiên sau này. Chúng ta đang sống trên một độ tuổi mà mã tái cấu trúc lại là chuẩn mực –