Hãy xem xét đoạn mã này:Tại sao lambdas trong C# dường như xử lý các giá trị trả về boolean khác nhau?
Func<int, bool> TestGreaterThanOne = delegate(int a) {
if (a > 1) return (true);
else return(false);
};
Trong đoạn mã trên, tôi không thể xóa các "else return (false)" tuyên bố - trình biên dịch cảnh báo rằng không phải tất cả đường dẫn mã trả về một giá trị. Nhưng trong đoạn mã sau, trong đó sử dụng một lambda ...
Func<int, bool> TestGreaterThanOne = a => a > 1;
Tôi không phải có câu lệnh "khác" - không có cảnh báo trình biên dịch và logic hoạt động như mong đợi.
Cơ chế nào đang được chơi ở đây để làm cho tôi không có tuyên bố "khác" trong lambda của tôi?
Chỉ cần làm rõ, biểu thức lambda không có bất kỳ cách xử lý đặc biệt nào của bool cụ thể. Bạn có thể viết phiên bản 'delegate' theo cách tương tự như Raymond Chen thực hiện bên dưới. Đặc điểm lambda duy nhất ở đây là thiếu chỉ định 'return' cho câu lệnh nội tuyến, trong đó giá trị trả về có thể được suy ra (như trong ví dụ của bạn). –