2013-03-20 34 views
13

Tôi có thiếu một cái gì đó hoặc là nó không thể trả về một giá trị từ một hàm lambda như ..C# Lambda Chức năng: trả về dữ liệu

Object test =() => { return new Object(); };

hoặc

string test =() => { return "hello"; };

tôi có được một lỗi xây dựng "Không thể chuyển đổi biểu thức lambda thành loại 'chuỗi' bởi vì nó không phải là một loại đại biểu".

Giống như cú pháp này gán lambda thay vì kết quả của lambda mà tôi không mong đợi. Tôi có thể đạt được chức năng mong muốn bằng cách gán chức năng cho một Func và gọi nó theo tên, nhưng đó là cách duy nhất?

Vui lòng không "tại sao bạn cần thực hiện việc này?" về ví dụ của tôi.

Cảm ơn trước!

+0

@IAbstract Chỉnh sửa của bạn đã thay đổi hoàn toàn câu hỏi vì vậy tôi đã chuyển nó lại. –

+0

@KonradRudolph: odd ... Tôi đã * cố gắng * để xóa 2 dòng cuối cùng. Cảm ơn vì đã bắt được điều đó. :) – IAbstract

+0

Bản sao có thể có của [Cách trả về giá trị bằng phương thức ẩn danh?] (Http://stackoverflow.com/questions/10520892/how-to-return-value-with-anonymous-method) – Roflo

Trả lời

32

Có thể nhưng bạn đang cố gắng chỉ định lambda cho số string. - Bạn cần phải invoke lambda:

Func<string> f =() => { return "hello"; }; 
string test = f(); 

Các thông báo lỗi thực sự nói lên tất cả:

Không thể chuyển đổi biểu thức lambda để gõ 'chuỗi'

... đó là chính xác vấn đề ở đây.

Nếu bạn muốn gọi nội tuyến lambda - nhưng thực sự: lý do tại sao? - bạn cũng có thể làm điều đó, trước tiên bạn chỉ cần biến nó thành đại biểu một cách rõ ràng:

string test = (new Func<string>(() => { return "hello"; }))(); 
+1

Gán biểu thức lambda cho một biến kiểu ngầm sẽ không hoạt động. – sloth

+0

@DominicKexel Ah, rất đúng. –

+0

Ah nhanh quá. vừa chỉnh sửa câu hỏi của tôi khi bạn trả lời. Có thể gọi nội tuyến lambda thay vì gán cho một Func ? Cảm ơn! –

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