2015-04-23 12 views
6

olan bazı örnek kod şudur: DateTime yanaBu neden İşte geçerli bir karşılaştırma

static DateTime time; 
if (time == null) 
{ 
/* do something */ 
} 

null olamaz, neden bu kod derler?

Düzenleme: sorun bu kod her zaman false dönecektir değil sadece budur, ama neden boş böyle bir karşılaştırma izin verilir asla DateTime gibi bir şey. time null olmayan bir değer tiptedir, ancak

+4

Bunun nedeni, "DateTime" ile "DateTime" arasında örtük bir dönüşüm olduğu için inanıyorum. Ancak, bu dönüşüm tutarlı olarak kontrol edilmez ... –

+0

(Ya da en azından tutarlı bir şekilde kontrol edilmemişti ... Eminim ki buralarda bazı gariplikler vardı, ama onları Roslyn ile üretemiyorum.) –

cevap

6

, null göre olabilecek dönüştürülür ve edilebilir. Karşılaştırma, geçerli bir sonuç olan false verecektir. Bununla birlikte, bunun iyi bir kod olduğu anlamına gelmez. Yeniden: daha keskin olan araçlar, bu satırı "İfade her zaman yanlış" diyerek uyarır.

+2

Roslyn da yapıyor :) –

+1

Visual Studio 2013, bazı değerler için değil, bazıları için bir uyarı görüntüler. Örneğin, "DateTime" yerine "int" kullanmış olsaydınız, yeşil dalgalı bir çizgi (uyarı) alırsınız "ifade her zaman yanlıştır"; 'DateTime' ile böyle bir uyarı almazsınız. – stakx