2010-02-11 31 views
5

Tôi sử dụng các loại Nullable<T> khá nhiều khi tải giá trị vào các lớp và cấu trúc khi tôi cần chúng không có giá trị, chẳng hạn như tải giá trị nullable từ cơ sở dữ liệu (ví dụ bên dưới).Đúc (int?) Null so với int mới?() - Cái nào tốt hơn?

Hãy xem xét đoạn mã này:

public class InfoObject 
{ 
    public int? UserID { get; set; } 
} 

// Load the ID into an SqlInt32 
SqlInt32 userID = reader.GetSqlInt32(reader.GetOrdinal("intUserID")); 

Khi tôi cần phải tải một giá trị vào một tài sản nullable, đôi khi tôi làm điều này:

infoObject.UserID = userID.IsNull ? (int?)null : userID.Value; 

Đôi khi tôi làm điều này thay vì:

infoObject.UserID = userID.IsNull ? new int?() : userID.Value; 

Mặc dù chúng đạt được kết quả tương tự, tôi muốn xem liệu có ai biết sử dụng nào tốt hơn trong khoảng từ 012 khôngvà new int?() liên quan đến hiệu suất, mã IL nhỏ nhất, thực tiễn tốt nhất, v.v ...?

Nói chung tôi đã ưu tiên phiên bản new int?() của mã ở trên, nhưng tôi không chắc liệu việc truyền (int?)null có nhanh hơn để trình biên dịch giải quyết hơn new int?() hay không.

Chúc mừng!

Trả lời

8

Chúng sẽ tạo ra cùng một IL. Sử dụng bất cứ điều gì bạn tìm thấy dễ dàng hơn để đọc.

Khi bạn nói về điều gì đó "nhanh hơn cho trình biên dịch giải quyết", bạn có đang nói về việc tối ưu hóa vi mô xây dựng lần không? Tôi không có ý tưởng nào sẽ nhanh hơn ở đó, nhưng tôi nghi ngờ nó sẽ tạo ra sự khác biệt đáng tin cậy cho bất kỳ cơ thể mã quan trọng nào.

Cá nhân tôi sử dụng null bất cứ khi nào tôi có thể làm như vậy mà không có sự mơ hồ; Tôi nghĩ rằng tôi vẫn thường thích các diễn viên để gọi new, nhưng nó làm cho không có sự khác biệt thực sự.

+0

Tôi đồng ý với bạn. '(int?) null' trông đẹp hơn' new int?() 'đặc biệt khi được sử dụng trong các câu lệnh điều kiện trong dòng như ví dụ của tôi cho thấy. Về câu hỏi của bạn: bạn trả lời nó khi bạn nói rằng IL là như nhau. Thời gian xây dựng hiện không phải là vấn đề (trừ khi tôi sử dụng TFSBuild, nhưng đó là một câu chuyện hoàn toàn khác) vì vậy miễn là IL khớp, tôi hạnh phúc :) – Codesleuth

+0

Yêu thích của tôi (với phiên bản truyền gần như một giây) là 'mặc định (int?)'. – sblom

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