6
votes

Passer un tableau constant à une fonction dans vb.net

Je sais que vous pouvez facilement passer un tableau à une fonction, comme le code ci-dessous indique

SomeFunction({"some", "array", "member"}) ' This obviously gives a syntax error


0 commentaires

4 Réponses :


1
votes

non; Il n'y a pas de tableau constant dans CLI; Les tableaux sont toujours mutables. Peut-être un Readonlycollection serait être approprié?

en C # (donc probablement similaire à VB), vous pouvez faire quelque chose comme: xxx

qui vous donne un statique (= partagé) non modifiable, -La collection utilisable. Cela fonctionne surtout si la méthode accepte ilist , ienumerable , etc (plutôt qu'un tableau, t [] ) .


3 commentaires

+1 Peut-être qu'un ienumerable serait mieux? L'OP n'utilise que le tableau pour itérer la collection.


@Andrew; J'étais juste édité pour ajouter cette suggestion très suggestion (ou si la méthode nécessite une utilisation de l'indexeur)


IEnumerable est dans mon expérience la meilleure approche pour les signatures de méthode, car vous avez toujours la possibilité de l'appeler avec un tableau si vous le souhaitez. Si vous utilisez .NET 3.5, vous pouvez toujours accéder à des éléments à une certaine position avec la méthode de l'extension .Elementat () (bien que si vous le faites de manière approfondie, vous devriez probablement passer un IList.



4
votes

Le plus proche que vous puissiez faire est:

SomeFunction(New String() {"some", "array", "members"})


2 commentaires

Oui, je l'ai inscrit aussi bientôt Patrick McDonald posté son poste. Mais je voulais m'assurer et l'avoir testé avant de répondre à la question moi-même. Merci à tout le monde d'avoir répondu.


Je pensais pour une raison pour une raison sombre comme string () = {"A", "B", "c"} ne fonctionnerait pas et supprimé ma réponse quand j'ai trouvé cela, bien fait pour avoir appris exactement ce que l'OP avait demandé . :)



3
votes

Une autre chose que je viens de penser à cela ne répond pas directement à la question, mais peut-être à l'intention de l'affiche - le mot clé PARAMARRAY. Si vous contrôlez la fonction que vous appelez, cela peut rendre la vie beaucoup plus facile.

Public Function MyFunction(ByVal ParamArray p as String())
   ' p is a normal array in here
End Function

' This is a valid call
MyFunction(New String() {"a", "b", "c", "d"})

' So is this
MyFunction("a", "b", "c", "d")


0 commentaires

2
votes
SomeFunction({"some", "array", "member"}) ' this obviously gives a syntax error
This is a perfectly valid syntax starting with VB10 (Visual Studio 2010). See this:
New Features in Visual Basic 10, under Array Literals.

0 commentaires