Tôi đang tìm một giải thích tốt về lý do tại sao một đoạn mã không biên dịch được và các biên dịch khác cũng tốt.Tại sao dấu ngoặc đơn xung quanh lỗi cú pháp gây ra lỗi lambda?
Thất bại:
richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));
Cung cấp cho các lỗi
tên Phương pháp dự kiến
trên ngoặc mở ngay sau khi MethodInvoker(
. Rõ ràng, tôi không thể quấn câu lệnh lambda của tôi trong dấu ngoặc đơn.
biên dịch:
richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));
Những câu hỏi là - tại sao?
Tôi luôn cho rằng tôi có thể bọc bất kỳ tham số phương thức nào trong dấu ngoặc đơn nếu tôi muốn nhưng rõ ràng đó không phải là trường hợp với biểu thức lambda. Tôi hiểu rằng họ có phần đặc biệt, nhưng tôi vẫn không thể thấy lý do chính đáng cho việc này. Có lẽ tôi không hiểu gì về cú pháp. Tôi thực sự muốn có nó.
Nhân tiện, điều này thể hiện trong VS2008, .NET 3.5 SP1, tôi chưa thử nghiệm trong VS2010 và .NET 4.
Cảm ơn, điều đó có ý nghĩa. Chỉ vì tò mò - bạn có thể vui lòng cung cấp một ví dụ về địa điểm đó không? – Dyppl
@Dyppl: 'Func F() {return (() => 1); } 'là hợp pháp nhưng theo đặc tả nó không nên. –
jason
cảm ơn! Vâng, sau đó tôi cảm thấy tốt hơn một chút về câu hỏi của tôi. Sự mâu thuẫn như vậy sẽ gây rối với đầu của bạn cuối cùng – Dyppl