2010-11-22 35 views
8

Một câu hỏi thực sự nhàm chán, xin lỗi, nhưng tôi thực sự không biết điều đó;) Tôi đã thử luôn string.empty, nhưng với số thập phân, lỗi này tạo ra lỗi.VB Kiểm tra xem int có trống không

Có chức năng nào không? Thật không may, đối với những câu hỏi đơn giản nhất, không có câu trả lời trên google

Trả lời

15

Tiêu đề (và thẻ) của bạn hỏi về "int", nhưng câu hỏi của bạn cho biết bạn đang gặp phải lỗi "thập phân". Dù bằng cách nào, không có điều gì là "trống" khi nói đến một số value type (chẳng hạn như Integer, Decimal, v.v.). Chúng không thể được đặt thành Nothing như bạn có thể với một số reference type (chẳng hạn như String hoặc lớp học). Thay vào đó, các kiểu giá trị có một hàm tạo ngầm mặc định tự động khởi tạo các biến của loại đó thành giá trị mặc định của nó. Đối với các giá trị số như IntegerDecimal, đây là 0. Đối với các loại khác, hãy xem this table.

Vì vậy, bạn có thể kiểm tra để xem nếu một loại giá trị đã được khởi tạo với đoạn mã sau:

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 

Lưu ý rằng mySecondFavoriteNumber được tự động khởi tạo 0 (giá trị mặc định cho một Integer) đằng sau hậu trường của các trình biên dịch, do đó, tuyên bố IfTrue. Trong thực tế, việc kê khai của mySecondFavoriteNumber trên là tương đương với các tuyên bố sau:

Dim mySecondFavoriteNumber as Integer = 0 


Tất nhiên, như bạn đã có thể nhận thấy, không có cách nào để biết liệu số yêu thích của một người là thực 0, hoặc nếu họ chưa chỉ định số yêu thích. Nếu bạn thực sự cần một loại giá trị có thể được thiết lập để Nothing, bạn có thể sử dụng Nullable(Of T), khai báo biến thay vào đó là:

Dim mySecondFavoriteNumber as Nullable(Of Integer) 

Và kiểm tra xem nó đã được phân công như sau:

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

Chỉ cần một mặt lưu ý: trên thực tế bạn * * có thể gán Không có gì để một kiểu giá trị trong VB.Net. Nhưng trong trường hợp đó, Không có gì không có nghĩa là 'null' nhưng 'mặc định (T)', vì vậy cho các số nguyên nó giống như 0. – jeroenh

+0

@jeroenh: Đúng vậy. Lưu ý rằng tôi đã nói rằng chúng không thể được đặt thành 'Nothing' * như bạn có thể với một kiểu tham chiếu *. Đặt giá trị kiểu thành 'Nothing' sẽ khiến nó được khởi tạo trở lại kiểu mặc định của nó. Vấn đề là không có trạng thái rỗng "null' hoặc" rỗng "nào cho các kiểu giá trị; chúng luôn chứa một giá trị. –

+0

Lưu ý gần đây hơn, 'Dim mySecondFavoriteNumber as Integer?' Giống với 'Dim mySecondFavoriteNumber as Nullable (Of Integer)' –

0

Vâng, giá trị mặc định cho một số sẽ là 0, nhưng bạn cũng có thể thử này:

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

và sau đó kiểm tra độ dài hoặc nếu chuỗi 's' rỗng.

2

có lẽ những gì bạn đang tìm kiếm là Nullable

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 
Các vấn đề liên quan