Khi so sánh với tối thiểu hoặc tối đa hai số/chức năng, C# có ngắn mạch nếu trường hợp này đúng với trường hợp đầu tiên và có ngụ ý sự thật cho số thứ hai không? Ví dụ cụ thể các trường hợp này làKhông so sánh với ngắn mạch Math.Min hay Math.Max?
if(x < Math.Max(y, z()))
và
if(x > Math.Min(y, z()))
Kể từ Math.Max(y, z())
sẽ trả về một giá trị ít nhất là lớn như y, nếu x < y thì không có nhu cầu để đánh giá z(), mà có thể mất một lúc. Tình huống tương tự với Math.Min
.
Tôi nhận ra rằng những thể cả hai được viết lại dọc theo dòng của
if(x < y || x < z())
để ngắn mạch, nhưng tôi nghĩ rằng đó là rõ ràng hơn những gì mà so sánh là không viết lại. Điều này có ngắn mạch không?
Giả sử bạn gọi 'if (x> XYZ (y, z()))' Làm thế nào trình biên dịch có thể biết kết quả của XYZ? Max, Min, Average hoặc bất cứ điều gì khác? –
@ L.B Điểm tuyệt vời, tôi đã không xem xét điều này theo cách đó. – yoozer8
Ngoài ra, biểu thức "ngắn mạch" có thể không tương đương, tùy thuộc vào cách 'Min' và' Max' xử lý NaN. – dan04