2010-11-22 11 views

cevap

15

Başlığınız (ve etiketiniz) bir "int" hakkında soru soruyor, ancak sorunuz "ondalık" bir hatayla karşılaştığınızı söylüyor. Her iki şekilde de, value type (Integer, Decimal, vb.) Söz konusu olduğunda "boş" diye bir şey yoktur. reference type ile (String veya sınıfında olduğu gibi) Nothing olarak ayarlanamazlar. Bunun yerine, değer türlerinde, bu tür değişkenlerinizi varsayılan değerine otomatik olarak ilklendiren örtülü bir varsayılan kurucu vardır.Integer ve Decimal gibi sayısal değerler için, bu 0'dır. Diğer türler için bkz. this table.

Yani bir değer türü aşağıdaki kodla başlatıldı olmadığını kontrol edebilirsiniz:

mySecondFavoriteNumber otomatik tarafından perde arkasında 0 (bir Integer için varsayılan değer) için başlatılır Not olduğunu
Dim myFavoriteNumber as Integer = 24 
If myFavoriteNumber = 0 Then 
    ''#This code will obviously never run, because the value was set to 24 
End If 

Dim mySecondFavoriteNumber as Integer 
If mySecondFavoriteNumber = 0 Then 
    MessageBox.Show("You haven't specified a second favorite number!") 
End If 

derleyici, bu nedenle If deyiminin True olduğunu. Aslında, mySecondFavoriteNumber beyanı yukarıda aşağıdaki ifadeyi eşdeğerdir:

Dim mySecondFavoriteNumber as Integer = 0 
Tabii


muhtemelen fark ettik gibi, bir kişinin sevdiği sayı aslında 0 olup olmadığını bilmek yolu yoktur, veya henüz favori bir numara belirlemediler.

Dim mySecondFavoriteNumber as Nullable(Of Integer) 

Ve atanmışsa şöyle görmek için kontrol: gerçekten Nothing ayarlanabilir bir değer türü gerekiyorsa , siz yerine değişkeni bildirerek, Nullable(Of T) kullanabilirsiniz

If mySecondFavoriteNumber.HasValue Then 
    ''#A value has been specified, so display it in a message box 
    MessageBox.Show("Your favorite number is: " & mySecondFavoriteNumber.Value) 
Else 
    ''#No value has been specified, so the Value property is empty 
    MessageBox.Show("You haven't specified a second favorite number!") 
End If 
+0

Sadece bir yan not null ise: aslında * * bir değer türüne Hiçbir şey atayabilirsiniz VB.Net'te. Fakat bu durumda, hiçbir şey 'null' değil 'varsayılan (T)' anlamına gelmez, tamsayılar için 0 – jeroenh

+0

@jeroenh ile aynıdır: Bu doğrudur. Referans tipi ile olabildiğince "Nothing" * ayarlanamayacaklarını söylediğime dikkat edin *. Bir değer türünü "Hiçbir şey" olarak ayarlamak, varsayılan türüne geri başlatılmasına neden olur. Asıl nokta, değer türleri için böyle bir “boş” ya da “boş” durumun olmamasıdır; her zaman bir değer içerirler. –

+0

Daha yakın zamanlarda, 'Dim mySecondFavoriteNumber Tamsayı olarak mı? ', Dim mySecondFavoriteNumber ile NULL (NULL) olarak aynıdır (Tamsayı) –

0

Eh, bir dizi için varsayılan değer 0 olur google hiçbir cevaplar vardır, ama aynı zamanda bu deneyebilirsiniz: eğer

int x = 123; 
String s = "" + x; 

ve sonra uzunluğunu kontrol etmek veya dize 'boş'.

2

Belki neyi arıyorsun

Dim foo As Nullable(Of Integer) = 1 
    Dim bar As Nullable(Of Decimal) = 2 

    If foo = 1 Then 
     If bar = 2 Then 
      foo = Nothing 
      bar = Nothing 
      If foo Is Nothing AndAlso bar Is Nothing Then Stop 
     End If 
    End If