SORU
13 Aralık 2009, Pazar


null olabilecek nesnenin bir değeri olması gerekir

Özel durum açıklaması paradoks var: Null olabilecek nesnenin bir değeri olması gerekir (?!)

Sorun bu:

DateTimeExtended Dersim var bu vardır

{
  DateTime? MyDataTime;
  int? otherdata;

}

ve bir kurucu

DateTimeExtended(DateTimeExtended myNewDT)
{
   this.MyDateTime = myNewDT.MyDateTime.Value;
   this.otherdata = myNewDT.otherdata;
}

bu kod çalışıyor

DateTimeExtended res = new DateTimeExtended(oldDTE);

atar mesaj InvalidOperationException bir:

Null olabilecek nesnenin bir değeri olması gerekir.

myNewDT.MyDateTime.Value - geçerli ve DateTime düzenli bir nesne içerir.

Bu mesajın anlamı nedir ve neyi yanlış yapıyorum?

oldDTE null olduğunu unutmayın. myNewDT.MyDateTime Value söktüm ama aynı durum oluşturulan bir pasör nedeniyle atılır.

CEVAP
13 Aralık 2009, Pazar


Satır this.MyDateTime = myNewDT.MyDateTime.Value; 17 ** değiştirmek gerekir

Ediyor istisnası atıldı .Bir DateTime dönüş için gerekli olduğu gibi Null DateTime, (o ne sözleşme için .madem bu özellik değeri Birleşik Devletleri değeri), ama geri dönmek için DateTime yok, çünkü bunu yapamaz, bir özel durum atar.

Genel olarak, körü körüne aramak için kötü bir fikirdir .Bu değişken değeri (HasValue kontrolü gibi) içermesi GEREKEN bazı ön bilgi yoksa null olabilecek bir tür, değer.

EDİT

İşte bu bir istisna değildir DateTimeExtended için: kod

class DateTimeExtended
{
    public DateTime? MyDateTime;
    public int? otherdata;

    public DateTimeExtended() { }

    public DateTimeExtended(DateTimeExtended other)
    {
        this.MyDateTime = other.MyDateTime;
        this.otherdata = other.otherdata;
    }
}

Bu şekilde test ettim:

DateTimeExtended dt1 = new DateTimeExtended();
DateTimeExtended dt2 = new DateTimeExtended(dt1);

Ekleme .Diğer yandan değer.MyDateTime bir özel durum neden olur. Kaldırma özel durum kurtulur. Yanlış yerde arıyorsun bence.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hotstrikegently

    hotstrikegen

    26 AĞUSTOS 2011
  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006