VB.NET

2009-07-23 4 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>が適していますか?編集不可能な、再利用可能なコレクションあなたの静的な(=共有)を与える

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

:あなたのような何かを行うことができます(VBで非常におそらく似た)C#ので

。これは、メソッドがIList<T>,IEnumerable<T>など(配列ではなく、T[]ではなく)を受け入れる場合に特にうまく機能します。

+0

+1おそらくIEnumerable が良いでしょうか? OPは配列を使ってコレクションを反復するだけです。 @Andrew; –

+0

;私はちょうどその非常に提案(またはIList メソッドがインデクサーの使用を必要とする場合)を追加しています –

+0

IEnumerable 私の経験では、メソッド署名のための最良のアプローチは、に。 .NET 3.5を使用している場合、.ElementAt()拡張メソッドを使用して特定の位置の要素にアクセスすることはできます(これを広範囲に行う場合は、おそらくIListを渡す必要があります)。 –

2

あなたがすることができる最も近いです:

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

これは、あなたが投稿したものに作成されたオブジェクトの面で実際に同じです。 .NETには実際には配列リテラルはなく、初期化のヘルパーにすぎません。

+0

はい、これを – Gert

+0

私は何らかの理由でDim sをString()= {"a"、 "b"、 "d"}と思っていましたが、 c "}はうまくいかず、見つかったときに私の答えを削除しました。 –

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

これは、VB10(Visual Studioの2010)で始まる完全に有効な構文です。これを参照してください。