2012-11-06 61 views
2

我主要是一名Python開發人員,但不幸的是,我不得不在VB .NET中爲客戶端編寫一個基於GUI的程序。我已經能夠找出最VB的特殊性的自己,但我有沒有運氣找到一種方法,這個簡單的成語翻譯成VB:在VB.NET中是否有一個splat操作符?

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 

回答

6

排序!首先,如果它讓你更方便,你可以做相反的事情。他們被稱爲參數數組:

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

因此,這些都是等價的:

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

但是,如果你真的想要一個圖示十歲上下的事情,那麼這就是代表:

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) 
+0

的感謝!我可能會使用「簡單」的答案 - ParamArray - 但這是一個有關代表的超級有用提示。我從來沒有真正明白他們是如何使用它們的 – sbrother

相關問題