2009-04-09 18 views
6

Básicamente, tengo una función que tiene un argumento de diccionario opcional. Como es opcional, necesita un valor predeterminado, y me gustaría establecerlo en un diccionario vacío en lugar de Nothing. ¿Cómo hago eso?Cómo crear un diccionario vacío para argumento opcional en VB.NET

En Java, yo simplemente hacer esto:

Collections.<K,V>emptyMap() 

¿Cómo se hace el equivalente en VB.NET?

(estoy usando .NET 3.5).

Respuesta

5

No hay forma de especificar un diccionario vacío como el valor predeterminado para un parámetro en VB.Net. VB.Net solo admite valores que pueden codificarse en MetaData y crear una nueva instancia de un diccionario no es uno de ellos.

Una opción que sí tiene es tener un valor opcional que por defecto es Nada. En el caso de Nothing, crea un diccionario vacío. Por ejemplo.

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

Gracias, esto también funcionó para mí con ... (Opcional ByRef myVar() como Double = Nothing). Estaba atascado averiguando cómo especificar los valores predeterminados de mi matriz hasta que me encontré con 'Nada' en su respuesta. – Stewbob

+0

Tenga en cuenta que el .NET Dictionary creado es modificable si se crea de esa manera. El resultado de las 'Colecciones de JDK. emptyMap() 'es inmutable. – Nico

9

No hay un diccionario vacío pre-enlatado en .NET. Para crear un diccionario vacío, simplemente vaya a New Dictionary().

Sin embargo, creo que no se le permitirá usar este el valor predeterminado de un argumento opcional, porque no se puede calcular en tiempo de compilación y poner en DefaultValueAttribute. En su lugar, deberá sobrecargar la función: tener una sobrecarga que tome el argumento del diccionario y otra que no. Este último simplemente creará un diccionario vacío como el anterior y llamará a la primera sobrecarga.

0

Dependiendo del propósito, podría ser un poco más (es decir, en términos de memoria) de ahorro de recursos si el significado-a-ser Diccionario vacío se crea con una capacidad de 0:

var empty = new Dictionary<string, string>(0); 
Cuestiones relacionadas