Testiniz başarısız:
bir null türüne GetType çağrılması tipi örtük Object dönüştürüldüğünde bir boks operasyon yapılmasına neden olur. Bu nedenle, GetType her zaman Nullable türünü değil, temel türünü temsil eden Tip nesnesini döndürür.
How to: Identify a Nullable Type'dan daha fazlasını okuyabilirsiniz. Bir önceki yazıda alınan
Bazı örnekler:
int? i = 5;
Type t = i.GetType();
Console.WriteLine(t.FullName); //"System.Int32"
Ayrıca unutmayın:
C# is operatör de null altında yatan tipine çalışır. Bu nedenle, bir değişkenin bir NULL türüne sahip olup olmadığını belirlemek için 'un kullanamazsınız. Aşağıdaki örnek, 'un operatörünün bir Null olarak <int> değişkenini int olarak kabul ettiğini gösterir.
int? i = 5;
if (i is int) { ... } // true
Sen C# derleyicisi null türleri optimize olduğunu iddia ederken doğrudur.
Sadece boks açısından ve CLR null türleri ile ilgili herhangi özel bir davranış olduğunu kutudan çıkarma ile açıklanmıştır: Burada sorunuza cevap gerektiğini Jon Skeet en C# in Depth bir alıntı. Aslında, davranış yalnızca topluluk isteklerinin sonucu olarak .NET 2.0 sürümünden kısa bir süre önce değiştirildi.
NULL ya da boş bir değere (bir değere sahip değilse) veya kutulanmış bir T değerine (eğer varsa) Nullable örneği kutulanır. Asla “kutulu nullable int” olarak işaretlenmez - böyle bir tip değildir.
StackOverflow'daki benzer iplik var: Nullable type is not a nullable type?
Assert.IsInstanceOfType (? X typeof (int)); –
Derleyici tarafından statik olarak belirlenen bir şeyi neden denemeye çalışıyorsunuz? 'x' * bir' int 'dışında bir şey olamaz ya da program derlemez. – Servy
@Servy - Anladığım kadarıyla, ünite testi başarısız olduğunda başarısız oldu. Discosultan nedenini açıklamak için mükemmel bir iş yaptı. GetType'ın böyle davranması gerekip gerekmediğini tartışmak için filozoflara bırakıyorum. –