2009-04-09 32 views
6

Về cơ bản, tôi có một hàm có đối số từ điển tùy chọn. Vì nó là tùy chọn, nó cần một giá trị mặc định và tôi muốn đặt nó thành một từ điển trống thay vì Không có gì. Làm thế nào để tôi đi về điều đó?Cách tạo một từ điển trống cho đối số tùy chọn trong VB.NET

Trong Java, tôi chỉ cần làm điều này:

Collections.<K,V>emptyMap() 

Làm thế nào để làm tương đương trong VB.NET?

(Tôi đang sử dụng .NET 3.5).

Trả lời

5

Không có cách nào để chỉ định một từ điển trống làm giá trị mặc định cho một tham số trong VB.Net. VB.Net chỉ hỗ trợ các giá trị có thể được mã hóa trong MetaData và tạo một thể hiện mới của một từ điển không phải là một trong số chúng.

Một tùy chọn bạn có mặc dù là có giá trị tùy chọn mặc định là Không có gì. Trong trường hợp Không có gì tạo ra một từ điển trống. Ví dụ.

Public Sub SomeMethod(Optional ByVal map as Dictionary(Of Key,Value) = Nothing) 
    if map Is Nothing Then 
    map = new Dictionary(Of Key,Value) 
    ENd If 
    ... 
End Sub 
+0

Cảm ơn, điều này cũng làm việc cho tôi với ... (Tùy chọn ByRef myVar() là Double = Không có gì). Tôi đã bị mắc kẹt tìm ra cách để xác định các giá trị mặc định của mảng của tôi cho đến khi tôi chạy qua 'Không có gì' trong câu trả lời của bạn. – Stewbob

+0

Xin lưu ý rằng thực tế, từ điển .NET được tạo ra có thể sửa đổi nếu được tạo theo cách đó. Kết quả của Bộ sưu tập của JDK. emptyMap() 'là không thay đổi. – Nico

9

Không có từ điển trống được đóng trước trong .NET. Để tạo một từ điển trống, chỉ cần đi từ điển mới().

Tuy nhiên, tôi tin rằng bạn sẽ không được phép sử dụng giá trị mặc định này của một đối số tùy chọn, vì nó không thể được tính tại thời gian biên dịch và được đưa vào DefaultValueAttribute. Thay vào đó, bạn sẽ cần phải quá tải các chức năng: có một quá tải mà mất các đối số từ điển, và một trong đó không. Sau này sẽ chỉ mới lên một từ điển trống như trên, và gọi quá tải đầu tiên.

0

Tùy thuộc vào mục đích, nó có thể là hơi nhiều tài nguyên tiết kiệm (ví dụ về bộ nhớ) nếu nghĩa-to-be trống điển được tạo ra với một năng lực 0:

var empty = new Dictionary<string, string>(0); 
Các vấn đề liên quan