Nasıl DateTime dönüştürmek için? DateTime


171

Bir nullable DateTime ( DateTime?) dönüştürmek istiyorum DateTime, ama bir hata alıyorum:

Kapalı olarak 'System.DateTime' türü dönüştürülemiyor mu? 'System.DateTime' öğesine gidin. Açık bir dönüşüm var (oyuncu kadrosu eksik mi?)

Aşağıdakileri denedim:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : _objHotelPackageOrder.UpdatedDate;

Yanıtlar:


304

Tam olarak bu amaç için tasarlanmış null birleştirme operatörünü kullanmak istiyorsunuz .

Bunu kullanarak bu kod ile sonuçlanır.

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

1
burada bir Sunucunun içinde Nullable Tarih / Saat ile bir görünümü dolduran bir pasaj: memDateLogin = m.memDateLogin ?? DateTime.MinValue
Ravi Ram

'DateTime?' dozu 'UpdatedDate' için tanım içermiyor
Vasil

88

MS zaten bunun için bir yöntem yaptı, bu yüzden boş birleştirme operatörünü kullanmak zorunda değilsiniz. İşlevsellik açısından hiçbir fark yoktur, ancak uzman olmayanların bir bakışta neler olduğunu öğrenmeleri daha kolaydır.

DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);

43

Bunu dene

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

Buradaki anahtar şey null birleştirme operatörüdür, bkz. Chills42'nin cevabı daha fazla bilgi.
cspolton

24

Basit bir yayın kullanabilirsiniz:

DateTime dtValue = (DateTime) dtNullAbleSource;

Leandro Tupone'un dediği gibi, varlığın daha önce boş olup olmadığını kontrol etmelisiniz


6

22

Sıfırlanabilir DateTime öğesinin Value özelliğini çağırmanız gerekir . Bu bir DateTime döndürecektir.

Varsayarsak UpdatedDateolduğunu DateTime?, o zaman bu çalışması gerekir:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;

Kodu okumayı biraz daha kolaylaştırmak için , onay yerine HasValue özelliğini kullanabilirsiniz null:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
                          ? _objHotelPackageOrder.UpdatedDate.Value
                          : DateTime.Now;

Bu daha da özlü hale getirilebilir:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

6

Aşağıdakiler nasıl olur:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;

6

Burada bir Sunucunun içinde Nullable Date / Time ile bir görünümü dolduran bir snippet var

memDateLogin = m.memDateLogin ?? DateTime.MinValue


1

Kabul edilen cevaptan çok daha iyi olan aşağıdakileri kullanmayı düşünün

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;

Neden daha iyi olduğunu söylemek ister misin?
n4rzul

0

Bunu dene:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;

0
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;

4
Önerilerinizi / cevaplarınızı açıklamak normalde iyi bir form olarak kabul edilir. Sadece kod kodları teknik olarak doğru olsalar bile şaşırtıcı derecede bilgilendirici olmayabilir.
Maximilian Ast

1
Evet, haklısın, önerdiğin şekilde uygulamaya çalışacaksın :)
Harsh Vyas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.