2013-05-16 32 views
10

Tôi đang cố gắng tìm ra cú pháp của C# cho các chức năng ẩn danh và điều gì đó không có ý nghĩa đối với tôi. Tại sao điều này hợp lệCác chức năng ẩn danh không có tham số đầu vào

Func<string, string> f = x => { return "Hello, world!"; }; 

nhưng đây không phải?

Func<string> g = { return "Hello, world!"; }; 

Trả lời

23

Thứ hai vẫn đòi hỏi cú pháp lambda:

Func<string> g =() => { return "Hello, world!"; }; 

Trong lần đầu tiên, bạn đang có hiệu quả bằng văn bản:

Func<string, string> f = (x) => { return "Hello, world!"; }; 

Nhưng C# sẽ cho phép bạn rời khỏi () khi xác định một lambda nếu chỉ có một đối số duy nhất, cho phép bạn viết x => thay thế. Khi không có đối số, bạn phải bao gồm ().

này được quy định tại phần 7,15 của C# đặc tả ngôn ngữ:

Trong một chức năng ẩn danh với một tham số duy nhất, ngầm đánh máy, các dấu ngoặc đơn có thể được bỏ qua trong danh sách tham số. Nói cách khác, một chức năng ẩn danh của mẫu

(param) => expr

có thể được viết tắt là

param => expr

-2

Bạn cần phải biết định nghĩa hàm:

Đóng gói phương thức có một tham số và trả về giá trị o f loại được chỉ định bởi tham số TResult.

Tài liệu tham khảo:

Microsoft

+0

'Func '(đó là những gì ví dụ thứ hai của mình đang sử dụng) một hàm mang theo không có tham số và trả về một chuỗi là. – Servy

+0

Anh ấy đang sử dụng: http://msdn.microsoft.com/en-us/library/bb534960.aspx –

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