2009-07-23 222 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中)一个完全有效的语法。看到这一点:

相关问题