2010-11-01 21 views
14

Varsayılan olarak (nesne) 'object' öğesinin herhangi bir başvuru türü olduğunu anladığımdan, her zaman null değerini döndürür, ancak varsayılanın ne olduğunu belirleyebilir miyim? Örneğin, varsayılan (object) == new object() istiyorum; "sıfır' -Referans tipi için varsayılan değeri belirtin

+1

Hayır, bu mümkün değil. Buradaki son hedefi bize anlatabilir misin, yani neden bu özelliği istersiniz? – Ani

+0

Hayır. Neden bunu yapmak zorundasınız? Nesne boşsa, yeni bir tane atamanız yeterlidir! –

+1

Sadece FirstOrDefault() öğesini söyleyebilmeniz ve asla boş bırakılamayacağınız. Sanırım o zaman yeni bir uzantı yöntemi yazacağım. –

cevap

25

sayılı default(type) hep aynı şeyi dönecektir "bu türün sürümü". Bir referans tipi için, bu her zaman sıfır değerine ayarlanmış bir nesnenin tutamacıdır - bu da null'a eşittir. Bir değer türü için, bu her zaman tüm üyelerin sıfıra ayarlı olduğu yapıdır.

Bu davranışı geçersiz kılma yolu yoktur; dil belirtimi bu şekilde tasarlanmıştır.


Düzenleme:

Sadece FirstOrDefault() demek ve bir null asla muktedir: yorumunuza gibi.

Bunu her halükarda tavsiye etmem. Kullanıcılar, null hata durumunda FirstOrDefault() beklerler. Kendi uzantı yönteminizi yazmak daha iyi olurdu:

static T FirstOrNewInstance<T>(this IEnumerable<T> sequence) where T : class, new() 
{ 
    return sequence.FirstOrDefault() ?? new T(); 
} 
3

Üzgünüm, ...

Ama yine Jon Skeet değilim, cevap "hayır sen olamaz"

+6

Normalde Jon Skeet nedenini (ya da neden olmasın) açıklar :) – PostMan

+0

@PostMan, dediğim gibi, Jon Skeet değilim;). Her neyse, burada açıklanacak bir şey olduğunu sanmıyorum ... bu mümkün değil. –

+0

Sadece uydur, iyi olacaksın :) Ama evet, katılıyorum, yapamayacağın başka bir açıklama yok. (bir tasarım kararı dışında) – PostMan

İlgili konular