2009-04-09 7 views
6

Fondamentalement, j'ai une fonction qui a un argument de dictionnaire optionnel. Comme c'est facultatif, il a besoin d'une valeur par défaut, et je voudrais le définir dans un dictionnaire vide au lieu de Nothing. Comment puis-je m'y prendre?Comment créer un dictionnaire vide pour un argument facultatif dans VB.NET

En Java, je voudrais simplement faire ceci:

Collections.<K,V>emptyMap() 

Comment dois-je faire l'équivalent en VB.NET?

(J'utilise .NET 3.5).

Répondre

5

Il est impossible de spécifier un dictionnaire vide comme valeur par défaut pour un paramètre dans VB.Net. VB.Net ne prend en charge que les valeurs qui peuvent être codées dans MetaData et la création d'une nouvelle instance d'un dictionnaire n'en fait pas partie.

Une option que vous avez cependant est d'avoir une valeur optionnelle qui vaut par défaut Nothing. Dans le cas de Nothing, créez un dictionnaire vide. Par exemple.

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

Merci, cela a aussi fonctionné pour moi avec ... (Facultatif ByRef myVar() comme Double = Nothing). J'étais coincé comprendre comment spécifier les valeurs par défaut de mon tableau jusqu'à ce que j'ai couru à travers 'Nothing' dans votre réponse. – Stewbob

+0

Veuillez noter que le dictionnaire .NET créé est modifiable s'il a été créé de cette façon. Le résultat des collections du JDK. emptyMap() 'est immuable. – Nico

9

Il n'y a pas de dictionnaire vide pré-conservé dans .NET. Pour créer un dictionnaire vide, il suffit d'aller New Dictionary().

Cependant, je crois que vous ne serez pas autorisé à utiliser cette valeur par défaut d'un argument optionnel, car il ne peut pas être calculé au moment de la compilation et mis dans DefaultValueAttribute. Au lieu de cela, vous devrez surcharger la fonction: avoir une surcharge qui prend l'argument du dictionnaire, et une qui ne le fait pas. Ce dernier ne ferait que rajouter un dictionnaire vide comme ci-dessus, et appeler la première surcharge.

0

Selon l'objectif, il pourrait être un peu plus économe en ressources (par exemple en termes de mémoire) si le signifié à vide du dictionnaire est créé avec une capacité de 0:

var empty = new Dictionary<string, string>(0); 
Questions connexes