Chúng xung đột vì quy tắc C# là không thể sử dụng hai cách sử dụng cùng một tên đơn giản để tham chiếu đến hai thứ khác nhau bên trong khối ngay lập tức bao quanh một trong hai. Trong ví dụ của bạn, tên đơn giản "s" được sử dụng để có nghĩa là hai thứ bên trong khối bao quanh khai báo biến cục bộ: nó có nghĩa là một biến cục bộ và một tham số lambda. Điều đó là điều bất hợp pháp. Tôi lưu ý rằng các thông báo lỗi bạn nhận được sẽ cho bạn biết điều này:
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# không cho phép bạn có tên đơn giản tương tự có nghĩa là hai điều trong cùng một khối bởi vì làm như vậy làm cho mã dễ gây lỗi, khó có thể chỉnh sửa, cứng để đọc, khó để tái cấu trúc và khó gỡ lỗi. Nó là tốt hơn để không cho phép thực hành lập trình xấu này hơn để cho phép nó và nguy cơ bạn gây ra lỗi bởi vì bạn giả định rằng "s" có nghĩa là cùng một điều trong suốt khối.
Khi mã chỉ dài hai dòng, bạn có thể dễ dàng nhớ rằng có hai nghĩa khác nhau cho s, nhưng khi nó dài hàng trăm dòng, không dễ dàng như vậy.
Để biết thêm thông tin về quy định này, xem:
http://blogs.msdn.com/b/ericlippert/archive/2009/11/02/simple-names-are-not-so-simple.aspx
Nguồn
2010-06-28 16:40:06
Xem: http://blogs.msdn.com/b/ericlippert/archive/2009/11/02/simple-names-are -not-so-simple.aspx –