2010-05-14 22 views
9

Birisi bana bir liste vermek, ya da ben bir null türü olabilir C# veri türlerinin bir listesini bulabilirsiniz yere işaret edebilir? ÖrneğinNe C# veri türleri null türlerini olabilir?

:

  • Ben Nullable<int> ben Nullable<byte[]> olmadığını biliyorum
  • Tamam olduğunu biliyoruz.

Ben null olduğunu ve hangilerinin hangilerinin türlerini öğrenmek istiyorum. BTW, biliyorum ki bunu çalışma zamanında test edebilirim. Ancak, bu bizim yazdığımız kod üreticisi içindir, bu yüzden gerçek bir türüm yok. Ben sadece bir sütun string veya int32 (vs) olduğunu biliyoruz. (Nullable<T> kendisi dışında)

+1

' null' Tamam değildir. Bu, byte [] b = null'unu yapabileceğiniz anlamına gelir. – fearofawhackplanet

cevap

20

tüm değer türleri null türleri de kullanılabilir - (! Bu da enum s içerir) System.ValueType türeyen diğer bir deyişle her türlü. Bu doğal olarak zaten null olarak,

struct Nullable<T> where T : struct, new() { … } 
+3

@OP: bütün mesele sorunu gidermek için çünkü ... (Ben büyük bir tasarım kusur çağırır, diğerleri katılmıyorum) değer türleri null olmamak ile. (http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx) Ve kesinlikle 'Nullable' diyerek herhangi bir işe yaramadı!Tam olarak sizin sorduğunuz gibi şeyler yüzünden "Ne tür nullable nedir?" Cevap: Referans türleri null. Değer türleri, tersi olan 'Nullable' ile uyumludur. * sigh * ;-) –

+2

@TJCrowder: Ben bir tanesine katılmıyorum… –

+4

Minör nitpick: Null * tipi * dışındaki tüm değer türleri *. yani follwoing geçerli değil: var i = yeni Nullable >(); –

1

Bu yapı dahil olmak üzere herhangi bir değer tipi, bir başvuru türü olamaz olabilir:

Bunun nedeni Nullable böyle bir şey bildirilmiş olmasıdır.

Evet: Int32 çift DateTime vb CustomStruct

No: Daha fazla bilgi için dize Dizisi CustomClass vb

, bkz: MSDN: http://msdn.microsoft.com/en-us/library/2cf62fcy(v=VS.80).aspx

+0

"Yapı dahil herhangi bir değer türü olabilir" - Null, kullanılabilir yapıların% 50'si hariç, Nullable '; p –

2

A tipi bir değer atanabiliyorsa veya null atanabilirse null, türün hiçbir değeri yoktur anlamına gelir. Sonuç olarak, null bir tür bir değer ifade edebilir veya hiçbir değer mevcut değildir. Örneğin, String gibi bir referans türü null olurken Int32 gibi bir değer türü değildir. Bir değer türü, yalnızca bu tür için uygun değerleri ifade etme kapasitesine sahip olduğundan null olamaz; null değerini ifade etmek için gerekli ek kapasiteye sahip değildir.

null yapısı referans türleri tasarım null, çünkü boş olabilen türü olarak sadece bir değer türünü kullanarak destekler.

null sınıf null yapı için ek destek sağlar. Nullable sınıfı, nullable tipte altta yatan tipin elde edilmesini ve altta yatan değer tipinin jenerik karşılaştırma ve eşitlik operasyonlarını desteklemediği null tür çiftleri üzerinde karşılaştırma ve eşitlik işlemlerini desteklemektedir. diziler referans türleri (içerdikleri tip bir değer türüdür bile) çünkü Yardım Dokümanlar itibaren

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx