2009-04-09 13 views
6

Zasadniczo mam funkcję, która ma opcjonalny argument słownikowy. Ponieważ jest opcjonalny, potrzebuje wartości domyślnej i chciałbym ustawić go na pusty słownik zamiast Nic. Jak mam to załatwić?Jak utworzyć pusty słownik dla opcjonalnego argumentu w VB.NET

W Javie, ja po prostu to zrobić:

Collections.<K,V>emptyMap() 

Jak zrobić równowartość w VB.NET?

(Używam .NET 3.5).

Odpowiedz

5

Nie ma możliwości określenia pustego słownika jako wartości domyślnej dla parametru w VB.Net. VB.Net obsługuje tylko wartości, które można zakodować w MetaData, a tworzenie nowej instancji Słownika nie jest jedną z nich.

Jedną z opcji jest opcjonalna wartość domyślna nic. W przypadku Nothing utwórz pusty słownik. Na przykład.

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

Dzięki, to również działało dla mnie z ... (Opcjonalnie ByRef myVar() jako Double = Nic). Utknąłem, zastanawiając się, jak określić domyślne wartości mojej tablicy, dopóki nie natknąłem się na odpowiedź "Nic". – Stewbob

+0

Należy pamiętać, że utworzony słownik .NET jest modyfikowalny, jeśli został stworzony w ten sposób. Rezultat kolekcji 'JDK. emptyMap() 'jest niezmienne. – Nico

9

Nie ma gotowego pustego słownika w .NET. Aby utworzyć pusty słownik, po prostu przejdź do nowego słownika().

Uważam jednak, że nie będzie można użyć tej wartości domyślnej opcjonalnego argumentu, ponieważ nie można go obliczyć w czasie kompilacji i wstawić do DefaultValueAttribute. Zamiast tego będziesz musiał przeciążyć funkcję: masz jedno przeciążenie, które pobiera argument słownikowy, a drugie nie. Ten ostatni po prostu wstawiłby pusty słownik jak powyżej i wywołał pierwsze przeciążenie.

0

W zależności od celu, to może być nieco więcej zasobów oszczędności (czyli w zakresie pamięci) jeżeli oznaczało-być pusty słownik tworzony jest o pojemności 0:

var empty = new Dictionary<string, string>(0); 
Powiązane problemy