2009-04-09 18 views
6

Fondamentalmente, ho una funzione che ha un argomento del dizionario opzionale. Dal momento che è facoltativo, ha bisogno di un valore predefinito e mi piacerebbe impostarlo su un dizionario vuoto anziché su Nothing. Come faccio a farlo?Come creare un dizionario vuoto per l'argomento facoltativo in VB.NET

In Java, vorrei semplicemente fare questo:

Collections.<K,V>emptyMap() 

Come faccio a fare l'equivalente in VB.NET?

(Sto usando .NET 3.5).

risposta

5

Non esiste alcun modo per specificare un dizionario vuoto come valore predefinito per un parametro in VB.Net. VB.Net supporta solo valori che possono essere codificati in MetaData e la creazione di una nuova istanza di un dizionario non è uno di questi.

Un'opzione è avere un valore facoltativo che non è impostato su Nothing. Nel caso di Nothing crea un dizionario vuoto. Per esempio.

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

Grazie, anche questo ha funzionato per me con ... (Opzionale ByRef myVar() come Double = Nothing). Sono rimasto bloccato a capire come specificare i valori predefiniti del mio array finché non ho trovato "Nothing" nella tua risposta. – Stewbob

+0

Si prega di essere consapevoli del fatto che il dizionario .NET creato è modificabile se creato in quel modo. Il risultato delle 'Collezioni 'di JDK. emptyMap() 'è immutabile. – Nico

9

Non c'è un dizionario vuoto pre-inscatolato in .NET. Per creare un dizionario vuoto, vai su Nuovo dizionario().

Tuttavia, credo che non sarà consentito utilizzare questo valore predefinito di un argomento facoltativo, perché non può essere calcolato in fase di compilazione e inserito in DefaultValueAttribute. Invece è necessario sovraccaricare la funzione: avere un sovraccarico che richiede l'argomento del dizionario e uno che non lo fa. Quest'ultimo avrebbe appena creato un dizionario vuoto come sopra, e chiamerebbe il primo sovraccarico.

0

seconda dello scopo, potrebbe essere un po 'più risparmio di risorse (ad esempio in termini di memoria) se il significato da essere vuota dizionario viene creato con una capacità di 0:

var empty = new Dictionary<string, string>(0); 
Problemi correlati