2009-07-23 65 views
4

我知道,你可以很容易地傳遞數組給一個函數,如下面的代碼顯示傳遞一個常量數組給一個函數在VB.NET

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 

但是,有沒有辦法通過一個常量數組在VB.NET中的功能?

例如在PHP中,你可以寫:

function SomeFunction($array) 
{ 
    for($i=0;$i<count($array);$i++) 
    { 
     echo($array[$i]); 
    } 
} 

function Test() 
{ 
    SomeFunction(array("some", "array", "members")); // Works for PHP 
} 

因此重申:有沒有辦法直接傳遞一個常量數組VB.NET中的功能?這樣做有沒有好處?我想象中可以省下幾個字節的內存。

PS:

SomeFunction({"some", "array", "member"}) ' This obviously gives a syntax error 

回答

2

我剛纔想到的另一件事並沒有直接回答這個問題,但也許會得到海報的意圖 - ParamArray關鍵字。如果你控制你所調用的功能,這可以使生活變得更容易。

Public Function MyFunction(ByVal ParamArray p as String()) 
    ' p is a normal array in here 
End Function 

' This is a valid call 
MyFunction(New String() {"a", "b", "c", "d"}) 

' So is this 
MyFunction("a", "b", "c", "d") 
1

否; CLI中不存在常數數組;數組總是可變的。也許ReadOnlyCollection<T>將是合適的?

在C#中(所以大概在VB中類似的),你可以這樣做:

private readonly static ReadOnlyCollection<string> fixedStrings 
    = new ReadOnlyCollection<string>(
     new string[] { "apple", "banana", "tomato", "orange" }); 

它給你一個靜態的(=共享)不可編輯的,可重複使用的集合。如果該方法接受IList<T>IEnumerable<T>等(而不是陣列,T[]),這種方法效果特別好。

+0

+1也許IEnumerable 會更好? OP僅使用數組迭代集合。 – 2009-07-23 13:43:59

+0

@Andrew;我只是編輯添加了非常建議(或IList 如果該方法需要索引器使用) – 2009-07-23 13:44:47

2

你能做的最接近的是:

SomeFunction(New String() {"some", "array", "members"}) 

這是創建你貼什麼對象而言實際上是相同的。 .NET中實際上沒有數組文字,只是用於初始化的助手。

2
SomeFunction({"some", "array", "member"}) ' this obviously gives a syntax error 

這是開始VB10(Visual Studio 2010中)一個完全有效的語法。看到這一點:

相關問題