2010-02-11 38 views
5

Veritabanlarına bir null değeri yüklemek gibi (örneğin aşağıdaki gibi), null olması gerektiğinde değerleri sınıflara ve yapılara yüklerken çok fazla Nullable<T> türünü kullanıyorum.Döküm (int?) Null vs new int?() - Hangisi daha iyi?

bu kod parçasını inceleyin: Bazen bunu yapmak, bir null mülkte bir değer yüklemek gerekir

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

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

:

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

yerine bunu:

Aynı sonucu elde etmelerine rağmen, 012 arasında hangisinin daha iyi olduğunu bilen birinin olup olmadığını görmek isterimve new int?(), performans, en küçük IL kodu, en iyi uygulamalar vb.

Genellikle yukarıdaki kod new int?() versiyonunu lehine oldum ama (int?)null döküm new int?() daha çözmek için derleyici için hızlı olup olmadığından emin değilim.

Şerefe!

cevap

8

Aynı IL'yi üreteceklerdir. Okumayı daha kolay bulursanız kullanın.

"Derleyicinin çözmesi daha hızlı" bir şey hakkında konuştuğunuzda, yapısını oluşturmak için mikro optimizasyondan bahsediyor musunuz? Orada daha hızlı olabilecek hiçbir fikrim yok, ama önemli bir kod gövdesi için güvenilir şekilde ölçülebilir bir fark yaratacağından kuşkuluyum.

Herhangi bir belirsizlik olmadan bunu yapabildiğim zaman şahsen null kullanıyorum; Ben hala genel olarak new'u aramak için oyuncuları tercih ettiğimi düşünüyorum, ama gerçek bir fark yaratmıyor.

+0

Sana katılıyorum. '(int?) null',' new int?() 'den çok daha iyi görünüyor, özellikle de örnek gösterilerim gibi çevrimiçi koşullu ifadelerde kullanıldığında. Sorunuzla ilgili olarak: IL'nin aynı olduğunu söylediğinde yanıtladınız. Oluşturma süreleri şu anda bir sorun değil (TFSBuild kullanmam sürece, ancak bu tamamen farklı bir hikaye) IL eşleşecek kadar uzun, mutluyum :) – Codesleuth

+0

Benim favorim (çok yakın bir ikinci sürüm olarak) varsayılan (int?) 'dir. – sblom

İlgili konular