2010-10-13 47 views
19

Tôi quan tâm nếu nó có thể sử dụng C# để viết một mã tương tự như javascript này một:Cách gọi hàm ẩn danh trong C#?

var v = (function() 
{ 
    return "some value"; 
})() 

Các nhất mà tôi có thể đạt được là:

Func<string> vf =() => 
{ 
    return "some value"; 
}; 

var v = vf(); 

Nhưng tôi muốn một cái gì đó như thế này:

// Gives error CS0149: Method name expected 
var v = (() => 
{ 
    return "some value"; 
})(); 

Có cách nào để gọi hàm này để ẩn danh không?

+1

Bạn có thể nói những gì bạn muốn làm với mã chính xác không? Đầu vào và đầu ra mong muốn là gì? –

+5

@Ahmad: Câu hỏi hoàn toàn rõ ràng và rõ ràng. – Timwi

+0

Bạn có thể giải thích lý do tại sao bạn muốn làm điều này? Tại sao đi qua tất cả các rigamarole xác định một chức năng vô danh và gọi nó khi bạn chỉ đơn giản có thể đặt cơ thể của chức năng vô danh * ngay tại đó * và nó sẽ được gọi khi mã chạy? –

Trả lời

30

Có, nhưng C# được nhập tĩnh, vì vậy bạn cần chỉ định loại đại biểu.

Ví dụ, bằng cách sử dụng cú pháp constructor:

var v = new Func<string>(() => 
{ 
    return "some value"; 
})(); 

// shorter version 
var v = new Func<string>(() => "some value")(); 

... hoặc cú pháp dàn diễn viên, trong đó có thể nhận được lộn xộn với quá nhiều ngoặc :)

var v = ((Func<string>) (() => 
{ 
    return "some value"; 
}))(); 

// shorter version 
var v = ((Func<string>)(() => "some value"))(); 
+3

rất tuyệt ... :) – RameshVel

+0

Cảm ơn bạn rất nhiều! Tôi nên đoán bản thân mình. –

+2

Sẽ chấp nhận câu trả lời của bạn sau 8 phút. :) –

0

Đây là cách bạn có thể sử dụng sau đó một cấu trúc như vậy để bao bọc bối cảnh - đóng cửa-

Control.Click += new Func<string, EventHandler>((x) => 
new System.EventHandler(delegate(object sender, EventArgs e) 
{ 

}))(valueForX); 
+1

Đây là cách làm nhiều hơn bạn cần. – Servy

+1

Sự yêu cầu dư thừa, dư thừa của hàm không cần phải là hàm. Có vẻ như bạn đang đến từ một nền JS; điều này là cần thiết trong JS chỉ vì các biến được phạm vi cho toàn bộ hàm trong JS. C# có phạm vi chính xác phù hợp, vì vậy điều này là không cần thiết. – Timwi

Các vấn đề liên quan