2009-01-29 4 views
5

Tôi có thể tạo động một hàm và gọi hàm đó (chuyển các giá trị vào hàm đó) trong một dòng mã không?Tạo một hàm và gọi nó trong một dòng mã C#

Làm rõ: Tôi đang tìm cách nào đó có thể cho phép tôi tạo một hàm ẩn danh và sau đó gọi trực tiếp. Loại:

delegate(string aa){ MessageBox.show(aa); }("Hello World!"); 

hoặc một cái gì đó tương tự (tôi biết mã trên không biên dịch, nhưng tôi muốn có thứ gì đó gần).

+0

Xin giải thích lý do tại sao bạn muốn làm điều này. –

+1

Tôi không muốn làm lộn xộn tiêu đề lớp bằng cách giới thiệu một tuyên bố khác. –

+0

Tại sao không chỉ sử dụng mã nội tuyến cũ thuần túy? Ngoài ra tôi không thể thực sự thấy cách một phương pháp riêng tư có thể là một vấn đề lớn. –

Trả lời

17
new Action<int>(x => Console.WriteLine(x))(3); 

không thể đọc được nhưng trả lời câu hỏi của bạn, bạn chắc chắn có thể.

EDIT: chỉ nhận thấy bạn gắn thẻ nó như C# 2.0, câu trả lời ở trên là dành cho 3.5, cho 2,0 nó sẽ là

new Action<int>(delegate(int x) { Console.WriteLine(x); })(3); 
+0

Cảm ơn .. có vẻ như là một lỗi nhỏ mặc dù ... Nó không phải là mới Hành động (đại biểu (chuỗi x) {Console.WriteLine (x)}). Gọi ("Hello World"); // Tôi đã sử dụng đại biểu thay thế. –

+0

trong 3.5 tác phẩm (tôi đã kiểm tra nó), trong 2.0 bạn cần phải viết như bạn đã đề xuất –

+0

ok chỉ thấy nó được gắn thẻ C# 2.0 Tôi đã sửa câu trả lời của tôi –

1

Để tạo một phương pháp sử dụng đại biểu vô danh:

delegate(...your arguments...) { ...your code... }; 

Edit: Sau khi câu hỏi đã được sửa đổi pablitos Câu trả lời là chính xác hơn.

+0

Để downvote một câu trả lời đó là không chính xác SAU câu hỏi đã được sửa đổi/thay đổi dường như với tôi không phải là cách bỏ phiếu nên làm việc. –

+0

@CKret: chào mừng bạn đến với internet, nơi mọi người downvote bạn mà không có một lý do, tất cả các thời gian! ;) Tôi đã upvoted câu trả lời của bạn mặc dù. –

+0

Cảm ơn bạn và cảm ơn bạn. ;) –

8

Các .Invoke là thực sự không cần thiết; bạn chỉ có thể viết:

new Action<int>(x => Console.WriteLine(x))(3); 

hoặc cho C# 2.0:

new Action<int>(delegate(int x) { Console.WriteLine(x); })(3); 
+0

đẹp nhất, không biết điều đó. –