2012-11-06 1 views
2

Je suis principalement un développeur Python mais je dois malheureusement écrire un programme basé sur une interface graphique dans VB .NET pour un client. J'ai été en mesure de comprendre la plupart des particularités de VB moi, mais je l'ai pas eu de chance de trouver un moyen de traduire cet idiome simple dans VB:Existe-t-il un opérateur splat dans VB .NET?

def my_function(arg1, arg2, arg3): 
    # do stuff with args 
    pass 

args = [1,2,3] 
my_function(*args) 

je traite certaines fonctions désagréables avec beaucoup de variables et le code serait beaucoup plus agréable et plus facile à lire si je pouvais faire quelque chose comme ça, donc je ne suis pas coincé avec

MyFunction(reader(0), reader(1), reader(2), reader(3)) 'ad infinum 

Répondre

6

Trier de! Tout d'abord, si cela vous convient mieux, vous pouvez faire le contraire. Ils sont appelés tableaux de paramètres:

Sub MyFunction(ParamArray things() As Whatever) 
    ' Do something with things 
End Sub 

Ce sont donc équivalentes:

MyFunction(reader(0), reader(1), reader(2), reader(3), ...) 
MyFunction(reader) 

Mais si vous voulez vraiment une chose floc-ish, alors que ce délégués:

Dim deleg As New Action(Of YourTypeA, YourTypeB)(AddressOf MyFunction) 

deleg.DynamicInvoke(reader) 

Si vous ne peut pas trouver un Action ou Func pour répondre à vos besoins, alors vous devez définir votre propre type de délégué pour correspondre:

Private Delegate Sub WayTooManyArgumentsDelegate(match arguments here)

et

Dim deleg As New WayTooManyArgumentsDelegate(AddressOf MyFunction) 
+0

merci! Je vais probablement utiliser la réponse "facile" - ParamArray - mais c'est un indice super utile sur les délégués. Je n'avais jamais vraiment compris à quoi ils servaient et comment les utiliser – sbrother