2015-07-09 15 views
12

Vb.net bir nullable tamsayı özelliği var.
Bu özellik kod içinde doğru değere sahiptir, ancak QuickWatch her zaman 1 görüntülüyorsanız, bir değerle ilk kez başlatmadan sonra bir altı sayısal numara görüntüler.QuickWatch Nullable özelliklerin ".ToString()" show için düzgün çalışmıyor

Benim kodları geçerli: daima 4/94065645841247E-324 görüntülemek

Public Property MyNumber As Integer? 

MyNumber = 6546 

MessageBox.Show(MyNumber.ToString()) 

QuickWatch1

Ve QuickWatch null çift mülkiyetiçin.

QuickWatch2

Ben visual studio 2010 & 2013 üzerinde .Net 4 & 4.5 bu test etmek ve aynı sonucu alırsınız. Ancak C# vardır değil bu sorun

DÜZENLEME:

bu durum neden izle pencerelerinde her ikisi QuickWatch3

gösterilmektedir gördüğüm gibi, benim de mükemmel sonuçlara eklemek?

DÜZENLEME:

Bu sorun .NET 4 ve 4.5 ve 4.5.1 beraberdir. .Net 2.0 ve 3.5 ile sorun yok

+0

Gerçekten de bir numara ile atanmışsa, 'MyNumber' değerini kontrol edin. Veya kodunuzun "MyNumber" değişkenine erişen başka bir parçası var, bunun global bir değişken olduğu için başka bir yerde değiştirilmiş olması mümkündür. – kaonashi

+0

@brcm: Sorunun ne olduğunu anladınız mı? Sanırım bu, görsel stüdyoda –

+0

'da bir hata gibidir. Evet, "6456" görüntüleniyor. Saat "1" gösterir. Görsel stüdyomda denedim ve aynı problemi almadım. Bu yüzden onun değişkeninin başka bir yerde değiştirilip değiştirilmediğini sordum. – kaonashi

cevap

9

Doğrulanmış, bu gerçekten hata ayıklayıcısında bir hatadır. Connect.microsoft.com'u aradım ve benzer bir şey bulamadım, bu pek çok VB.NET programcıya çarpan bir hata değil. Tamamen şaşırtıcı değil, bu sadece Nullable değişken adına .ToString() eklediğinizde yanılıyor. Kimse bunu yapmaz.

Bu sitede yardım alabileceğiniz bir tür hata değil, Microsoft'un düzeltmesi gereken bir hatadır.

Bu hatayı biraz karakterize etmek, hata ayıklayıcıda yerleşik olarak VB.NET'e özgü ifade çözümleyicide yanlış görünmektedir. Bunu bir C# projesinde tekrarlayamamanın nedeni. Ve sürecin bitkinliğinin neden önemli olmadığı, 64 bitlik hata ayıklayıcı da kötü değerleri gösterir. Bu genellikle Microsoft'un emekli olmak için üzerinde çalıştığı bir kod parçası. Temel sorun, VB.NET derleyicisinin eşdeğerini hata ayıklayıcısına yerleştirmeleri gerektiğidir, böylece bu ifadeler ayrıştırılabilir. Sınırlı olsa da, bu ayrıştırıcı neredeyse tüm dili desteklemiyor. Yan etki, hata ayıklayıcının çalıştırdığı kodun programınızın çalıştırdığı koddan farklı olabileceğidir.

Nullable (Of T) .ToString() için kod oluşturma oldukça zor, koşullu bir kutu dönüştürme gerektiriyor. Ayrıştırıcı böyle bir ifade için onu flulaştırır, MyNumber.GetHashCode()'un nasıl yanlış değer ürettiğini de not edin. Ve MyNumber.Equals(5456.0). Boks dönüşümünü gerektiren ifadeler.

Teknik olarak bu hatayı connect.microsoft.com adresinden de bildirebilirsiniz, ancak zaman geçirmenizi tavsiye etmem. Belirtildiği gibi, Microsoft bu ayrıştırıcıyı emekli etmek için çalışıyor ve sonunda oldu. Roslyn, her yerde kullanılabilen bir derleme servisidir. VS2015'e entegre edildi ve hata ayıklayıcının da kullandığını bildiği kadarıyla. % 100 emin değil, VS2015 serbest bırakıldığında 9 gün içinde bileceğim.Belki beta/RC sürümü yüklü olan bir kişi bir yorum ile onaylayabilir.

GÜNCELLEME: VS2015'te doğrulandı.

Bu arada, güncelleştirilinceye kadar, geçici çözüm, hızlı/izle ifadelerinizdeki niçin değiştirilebilir değişkenlerde ToString() öğesini kullanmayı bırakmaktır. Bu bir araba.