2010-04-29 15 views

Trả lời

21

Điều tốt nhất là default(int?) bởi vì nó luôn hoạt động như mong đợi (loại tham chiếu, loại giá trị và thậm chí cả trong generics).

+0

Không thấy điều này trước đây, tôi thích nó! Tôi đã luôn luôn sử dụng (int?) Null và luôn luôn cảm thấy nó là clunky. –

5

Tôi có xu hướng thích ký hiệu (int?) thành Nullable<int>. Ngôn ngữ cung cấp đường cú pháp này, vì vậy tôi cố gắng sử dụng nó.

Đây cũng là lý do tại sao tôi gọi nó là int thay vì Int32.

1

Điều thú vị là bạn chỉ phải xác định một trong các loại trả về. Nói cách khác, điều này cũng sẽ làm việc:

return Int32.TryParse(Request["id"], out i) ? (int?)i : null; 

... mặc dù các trình biên dịch cho thấy bạn phải đúc null: Loại biểu thức điều kiện không xác định được vì không có chuyển đổi ngầm giữa 'int' và '< null>'

2

Làm bất cứ điều gì rõ ràng nhất cho bạn.

Điều đó nói rằng tôi muốn chỉ trả lại null và trình biên dịch làm việc ra các chi tiết.

5

Không quan trọng, nó tạo mã chính xác . (int?)null được dịch bởi trình biên dịch C# thành new Nullable<int>(). Bạn có thể thấy điều này cho chính mình bằng cách viết một chương trình thử nghiệm nhỏ và xem xét nó với ildasm.exe

Vì vậy, "tốt hơn" chỉ đơn thuần là kiểu bạn thích. Sử dụng liên tục của int? sẽ là sở thích cá nhân của tôi.

Một lưu ý thực tế: trong một phiên gỡ lỗi điển hình, bạn có thể quan tâm đến việc tìm ra rằng null đang được trả về. Đặc biệt vì dữ liệu bạn đọc không tạo ra những gì bạn mong đợi. Điều đó trở nên rất dễ dàng nếu bạn viết câu lệnh không trả về trên một dòng riêng biệt:

int i; 
    if (Int32.TryParse(Request["id"], out i)) return i; 
    else return null;  // <== set breakpoint here. 

Hãy loại bỏ quá trình truyền. Và tạo mã số chính xác