Déclarer et initialiser un tableau de chaînes dans VB.NET

J'essayais de retourner un tableau de chaînes à partir d'une fonction et j'ai été surpris par une erreur.

Je m'attendais à ce que cela fonctionne, mais cela produit une erreur:

Public Function TestError() As String()
    Return {"foo", "bar"}
End Function

Cela fonctionne:

Public Function TestOK() As String()
    Dim ar As String() = {"foo", "bar"}
    Return ar
End Function

Tout comme:

Public Function TestOK() As String()
    Return New String() {"foo", "bar"}
End Function

Je suppose que je ne suis pas clair sur la signification des {} ' s - Existe-t-il un moyen de renvoyer implicitement un tableau de chaînes sans explicitement le créer et l'initialiser?

34
demandé sur Peter Mortensen 2011-03-10 19:21:23

3 réponses

La prise en charge de L'initialiseur de tableau pour l'inférence de type a été modifiée dans Visual Basic 10 vs Visual Basic 9.

Dans la version précédente de VB, il était nécessaire de mettre des parens vides pour signifier un tableau. En outre, il définirait le tableau comme tableau d'objets, sauf indication contraire:

' Integer array
Dim i as Integer() = {1, 2, 3, 4} 

' Object array
Dim o() = {1, 2, 3} 

Vérifiez plus d'informations:

Visual Basic 2010 Changements De Rupture

Initialiseurs de Collection et de tableau dans Visual Basic 2010

33
répondu pirho 2011-03-11 09:35:33
Public Function TestError() As String()
     Return {"foo", "bar"}
End Function

Fonctionne bien pour moi et devrait fonctionner pour vous, mais vous devrez peut-être Autoriser l'utilisation de déclarations implicites dans votre projet. Je crois que cela éteint les Options strictes dans la section de compilation des paramètres du programme.

Puisque vous utilisez VS 2008 (VB.NET 9.0) vous devez déclarer create the new instance

New String() {"foo", "Bar"}

13
répondu msarchet 2011-03-10 17:01:30

Je crois que vous devez spécifier "Option Infer On" pour que cela fonctionne.

Option Infer permet au compilateur de deviner ce qui est représenté par votre code, donc il va deviner que {"stuff"} est un tableau de chaînes. Avec "Option Infer Off", {"stuff"} n'aura aucun type assigné, jamais, et donc il échouera toujours, sans spécificateur de type.

L'Option Infer est, je pense activé par défaut dans les nouveaux projets, mais désactivé par défaut lorsque vous migrez des cadres antérieurs jusqu'à 3.5.

Avis entrants:

En outre, vous mentionnez que vous avez "Option explicite Off" . S'il vous plait ne faites pas ça.

Définir "option explicite Off" signifie que vous n'avez jamais à déclarer de variables. Cela signifie que le code suivant créera silencieusement et invisiblement la variable "Y":

Dim X as Integer
Y = 3

C'est horrible, fou, et faux. Il crée des variables lorsque vous faites des fautes de frappe. Je garde l'espoir qu'ils vont éliminer à partir de la langue.

6
répondu Frosty840 2016-04-27 13:04:46