2009-09-08 42 views
9

Tại sao dòng mã sau không hoạt động trong một phương thức?Sử dụng trả lại và rút gọn nếu trong C#

return (count > 0) ? true : false; 

Nó hoạt động hoàn toàn tốt đẹp nếu tôi làm:

bool ret = (count > 0) ? true : false; 
return ret; 

Bonus Câu hỏi: Liệu nó thực sự nhanh hơn và hiệu quả hơn so với tiêu chuẩn nếu tuyên bố?

bool ret = false; 
if(count > 0) 
    ret = true; 
return ret; 

Bạn muốn giới thiệu cái nào?

+1

Tôi lấy nó rằng không có lỗi thời gian biên dịch, chỉ là phương thức trả về giá trị sai? – ChrisF

+0

Đã xảy ra lỗi thời gian biên dịch ... Đã xảy ra lỗi trong cú pháp của tôi. –

+0

những gì thường xuyên xảy ra trong trường hợp của nhà điều hành đại học là việc đánh giá kết quả đầu tiên (số> 0) xác định giá trị trả về mà hàm sẽ sử dụng. Tôi giả sử rằng hàm của bạn trả về bool?
Tôi sẽ cố gắng xác định giá trị của (đếm> 0). Nếu đó là vấn đề, bạn có thể phải báo cáo toàn bộ trường hợp:
return (bool) ((count> 0)? True: false); đó là một điều kỳ lạ tôi đã thấy ở những nơi khác. – KevinDTimm

Trả lời

38

Tôi muốn giới thiệu:

return count > 0; 

Không cần phải quay trở lại một cách rõ ràng true hoặc false.

Có nói rằng, lỗi biên dịch của bạn sẽ lôi cuốn tôi. Ngay từ cái nhìn đầu tiên có vẻ như nó sẽ hoạt động. Bạn có thể đăng một ví dụ ngắn nhưng đầy đủ mà không biên dịch được không? Loại biểu thức điều kiện đó phải là bool không có vấn đề gì. Tôi đoán là bạn đã có một kịch bản phức tạp hơn và bằng cách đơn giản hóa ví dụ bạn đã loại bỏ vấn đề thực sự.

Đối với câu hỏi tiền thưởng: Tôi không biết điều gì sẽ nhanh hơn, tôi cũng không quan tâm đến 99,99% số trường hợp. Tôi muốn được ngạc nhiên để thấy rằng nó gây ra bất kỳ sự chậm trễ đáng kể nào, trừ khi nó bị cấm nội tuyến vì một lý do nào đó. Hãy truy cập giải pháp dễ đọc nhất - đây là câu lệnh trả về đơn giản, IMO.

+1

+1. Ngoại trừ trong một số trường hợp (hiếm), khả năng đọc> tất cả. –

+0

Cảm ơn Jon, vấn đề là một lỗi cú pháp đơn giản mà không được chú ý (thường cho đến SAU KHI bạn hỏi có gì sai trên SO). Tôi thích câu trả lời này, nó thậm chí còn ngắn hơn! số trả về> 0; –

+1

người bạn luôn đánh tôi với nó ... –

10

thử điều này:

return count > 0; 

trước khi quay trở lại trả về biểu count> 0 được đánh giá và đưa ra đúng hay sai.

này cũng nên làm việc:

return (count > 0 ? true : false); 

nhưng tôi muốn khuyên bạn không làm điều này.

Tôi luôn cố gắng giữ số lượng hoạt động ngang thấp, tôi tin rằng nó giúp việc đọc mã dễ dàng hơn.

chỉ tưởng tượng các tình huống sau đó sẽ chỉ nhầm lẫn :)

return count > 0 ? false : true; 
1

làm việc này

return (count > 0 ? true : false); 

Sau đó bạn có thể làm cho nó trở về giá trị khác hơn là true và false. Trong trường hợp cụ thể của bạn, tôi sẽ làm như các đề xuất khác; số trả về> 0;

5

Từ quan điểm của C#

return count > 0; 

là tốt hơn cho nó readabilty.

Nhưng trình biên dịch mã hóa mã, do đó, ba tùy chọn của bạn thực sự giống nhau khi được biên dịch. Bạn có thể thử xem mã IL để xác minh!

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