En passant une constante tableau à une fonction dans VB.NET
Je sais que vous pouvez facilement passer un tableau à une fonction, comme le code ci-dessous montre
Private Sub SomeFunction(ByVal PassedArray() As String)
For i As Integer = 0 To PassedArray.Count - 1
Debug.WriteLine(PassedArray(i))
Next
End Sub
Public Sub Test()
Dim MyArray As String() = {"some", "array", "members"}
SomeFunction(MyArray)
End Sub
Mais est-il un moyen de passer d'une constante tableau à une fonction dans VB.NET?
Par exemple en PHP, vous pouvez écrire:
function SomeFunction($array)
{
for($i=0;$i<count($array);$i++)
{
echo($array[$i]);
}
}
function Test()
{
SomeFunction(array("some", "array", "members")); // Works for PHP
}
Donc réitérer: Est-il un moyen de passer d'une constante tableau directement à une fonction dans VB.NET? Est-il un avantage à le faire? J'imagine que quelques octets de mémoire pourraient être épargnés.
PS.:
SomeFunction({"some", "array", "member"}) ' This obviously gives a syntax error
OriginalL'auteur Gert | 2009-07-23
Vous devez vous connecter pour publier un commentaire.
Autre chose, je viens de penser que ne pas répondre directement à la question, mais peut-être obtient à l'affiche de l'intention - le Tableau mots-clés. Si vous contrôlez la fonction que vous appelez, ce qui peut rendre la vie beaucoup plus facile.
OriginalL'auteur Ryan Brunner
Le plus proche que vous pouvez faire est de:
C'est en fait identique en termes d'objets créés à ce que vous avez posté. Il n'y a pas réellement de la matrice de littéraux .NET, il suffit de les aides pour l'initialisation.
Je pensais que pour une raison quelconque Dim s as String() = {"a", "b", "c"} ne fonctionne pas et supprimé ma réponse quand j'ai trouvé qu'il a fait, bien fait, pour le travail des exactement ce que l'OP a été demandé. 🙂
OriginalL'auteur Ryan Brunner
C'est parfaitement valide la syntaxe de départ avec VB10 (Visual Studio 2010). Voir ceci:
OriginalL'auteur Neolisk
Pas; il n'y a pas une telle chose comme une constante de tableau dans la CLI; les tableaux sont en perpétuel changement. Peut-être un
ReadOnlyCollection<T>
seraient appropriés?En C# (donc vraisemblablement similaire en VB) vous pouvez faire quelque chose comme:
Qui vous donne un statique (=partagée) non modifiable, ré-utilisable de la collection. Cela fonctionne particulièrement bien si la méthode accepte
IList<T>
,IEnumerable<T>
, etc (plutôt qu'un tableau,T[]
).Je viens de l'édition d'ajouter que très suggestion (ou IList<T> si la méthode nécessite l'utilisation de l'indexeur)
IEnumerable<T> dans mon expérience, la meilleure approche pour les signatures de méthode, car vous avez toujours l'option d'appeler avec un tableau si vous le souhaitez. Si vous êtes en utilisant .NET 3.5, vous pouvez toujours accéder à des éléments dans une certaine position avec les .ElementAt() la méthode d'extension (bien que si vous êtes en train de faire cette profondeur, vous devriez probablement passer un IList.
OriginalL'auteur Marc Gravell