2012-01-03 94 views
5

Câu hỏi đơn giản: Tôi có một vài biến số tăng gấp đôi. Tôi muốn có thể lưu trữ trạng thái "rỗng" trong chúng, tức là tôi cần có khả năng biểu thị rằng biến không chứa dữ liệu hợp lệ. Tôi thực sự không muốn liên kết một biến boolean "là hợp lệ" với mọi double, điều đó sẽ rất xấu và có thể là không cần thiết.Làm thế nào để sử dụng một giá trị null trong một đôi trong VB.Net 2010?

Trước tiên, tôi phát hiện ra rằng người ta phải khai báo các biến khác nhau để cho phép các khái niệm về 'IsNothing' để được kiểm tra, vì vậy tôi làm điều này:

dim someDouble as Double? 

(Lưu ý các dấu hỏi). Nếu tôi không khai báo nó như vậy, kiểm tra lỗi sẽ cho tôi thông báo "IsNot yêu cầu toán hạng có các kiểu tham chiếu".

Khi khai báo, thiết lập các biến để ...

someDouble = Nothing 

... dường như để thiết lập nó để zero, bởi vì nó không bao giờ chạy mã trong câu lệnh if tôi/khác để kiểm tra xem liệu someDouble IsNot Nothing. .. đó là xấu bởi vì biến hợp pháp có thể lưu trữ một 0 như là một phần hợp lệ của dữ liệu.

Tôi thiếu gì ở đây? Cảm ơn!

CHỈNH SỬA: Tôi đã bỏ qua rằng tôi đang sử dụng các thuộc tính trong lớp học với các giá trị này là GetSet. Nó chỉ ra tôi đã làm những điều đúng, ngoại trừ tôi để lại loại Property của tôi như là một Double thay vì một Double? vì vậy nó đã được đúc trở lại không thay vì giá trị Nothing. Tuy nhiên, thông tin hữu ích vẫn nằm trong các câu trả lời bên dưới!

Trả lời

7

bạn nên đi đọc trên Nullable Structure trên MSDN

này sẽ giải thích làm thế nào để sử dụng nó

dụ:

Sub Main() 
    Dim someDouble As Double? 

    someDouble = Nothing 
    If someDouble.HasValue Then 
     Console.WriteLine(someDouble.ToString) 
    Else 
     Console.WriteLine("someDouble is nothing/null") 
    End If 
    Console.Read() 
End Sub 
+0

@BalaR, có nó là – Fredou

+0

Aha, đây là bản chất những gì tôi đã làm ... ngoại trừ tôi goofed lên và quên thay đổi * tài sản của tôi * để loại 'đôi?' từ 'Double' để nó được đưa trở lại tiêu chuẩn 'Double' khi thực hiện 'Set'. Argh! Cảm ơn các liên kết! – evilspoons

4

Trong khi tôi không biết những gì đang gây ra vấn đề của mình với "Không có gì" , bạn cũng có thể sử dụng "Double.NaN" (Not a Number) để thay thế. Điều này cũng sẽ không yêu cầu đặc biệt "Double?" tờ khai.

+0

Ý tưởng tuyệt vời! Tôi nghĩ rằng tôi sẽ cố gắng này thay vì cách tiếp cận Không có gì (null). Xem bình luận của tôi về câu trả lời của Fredou vì sao nó không làm việc với Nothing. – evilspoons

Các vấn đề liên quan