我主要是一名Python开发人员,但遗憾的是我不得不为客户端在VB .NET中编写基于GUI的程序.我自己已经能够弄清楚VB的大多数特性,但我没有找到将这个简单的习语翻译成VB的方法:
def my_function(arg1, arg2, arg3):
# do stuff with args
pass
args = [1,2,3]
my_function(*args)
Run Code Online (Sandbox Code Playgroud)
我正在处理一些带有大量变量的讨厌函数,如果我可以做类似的事情,那么代码会更好更易读,所以我不会被困在
MyFunction(reader(0), reader(1), reader(2), reader(3)) 'ad infinum
Run Code Online (Sandbox Code Playgroud)
有点!首先,如果它对你来说更方便,你可以做相反的事情.它们被称为参数数组:
Sub MyFunction(ParamArray things() As Whatever)
' Do something with things
End Sub
Run Code Online (Sandbox Code Playgroud)
所以这些是等价的:
MyFunction(reader(0), reader(1), reader(2), reader(3), ...)
MyFunction(reader)
Run Code Online (Sandbox Code Playgroud)
但如果你真的想要一个splat-ish的东西,那就是代表们:
Dim deleg As New Action(Of YourTypeA, YourTypeB)(AddressOf MyFunction)
deleg.DynamicInvoke(reader)
Run Code Online (Sandbox Code Playgroud)
如果找不到Action或Func满足您的需求,那么您需要定义自己的委托类型以匹配:
Private Delegate Sub WayTooManyArgumentsDelegate(match arguments here)Run Code Online (Sandbox Code Playgroud)
和
Dim deleg As New WayTooManyArgumentsDelegate(AddressOf MyFunction)
Run Code Online (Sandbox Code Playgroud)