VB .NET中是否有splat操作符?

时间:2012-11-06 04:28:20

标签: vb.net

我主要是一名Python开发人员,但遗憾的是我不得不为客户端在VB .NET中编写基于GUI的程序。我自己已经能够弄清楚VB的大部分特点,但是我没有找到将这个简单的习语翻译成VB的方法:

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

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

我正在处理一些带有大量变量的令人讨厌的函数,如果我可以做类似的事情,代码会更好更易读,所以我不会被困在

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

1 个答案:

答案 0 :(得分:6)

排序!首先,如果它对你来说更方便,你可以做相反的事情。它们被称为参数数组:

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

所以这些是等价的:

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

但如果你真的想要一个splat-ish的东西,那就是代表:

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

deleg.DynamicInvoke(reader)

如果找不到符合您需求的ActionFunc,那么您需要定义自己的代理类型以匹配:

Private Delegate Sub WayTooManyArgumentsDelegate(match arguments here)

Dim deleg As New WayTooManyArgumentsDelegate(AddressOf MyFunction)