0

ParamArray を受け入れるメソッドを呼び出す必要があります。

Method(ByVal ParamArray elements() As Object)

XmlDocument 内の可変数の XmlNodes に基づいて、2 つの既知の文字列と不明な数の文字列を渡す必要があります。

すなわち

Method("Known String 1", "Known String 2", Node1.OuterXml, ..., NodeN.OuterXml)

これどうやってするの?

ノードをループして作成して渡してみました:

List(Of String)その結果elements()"Known String 1", "Known String 2", System.Collections.Generic.List[System.String]

List(Of String).ToArrayその結果elements()"Known String 1", "Known String 2", System.String[]

String()その結果elements()"Known String 1", "Known String 2", System.String[]

Collectionその結果elements()"Known String 1", "Known String 2", Microsoft.VisualBasic.Collection

私が欲しいのは、3つのノードの例として、elements()含めることです"Known String 1", "Known String 2", "<node 1>", "<node 2>", "<node 3>"

これは可能ですか?

4

3 に答える 3

0

ここでの問題は、あなたが書いたものとコンパイラが行うものとの間の直感的でない飛躍です - 主に構文が少し不安定であるためです。

とにかく、メソッド シグネチャに SINGLE パラメータが含まれていることに注意してください: elements(). は()配列であることを意味します。

このParamArrayキーワードを使用すると、配列の要素を「展開」し、各配列要素を独自のパラメーターとしてメソッドに渡すことができます。これは既にご存知のことです。ただし、コンパイラ (または JIT など) がこれらのパラメーターを再結合して単一の配列に戻すことも意味します。

elements次のように定義するという不幸がなければ、これに気付くでしょうObject

TL;DR :
各配列要素を個別に渡すか、この場合のオプションではありません。または、配列型のパラメーターに単一の配列を渡します。

Dim stuffToPassInToTheMethod As List(Of String) = New List(Of String) From {"Magic String One", "Magic String Two"}

' いくつかのループと xml ノード.. 何とか何とか.. 最終的に stuffToPassInToTheMethod.Add(node.Attributes("yadda").Value を呼び出す

最後に、それをメソッドに渡します。 crazyMethodNameWithThePOINTLESSParamArray(stuffToPassInToTheMethod.ToArray)

于 2015-06-26T10:16:36.387 に答える
-1

これまでの私の答えは、メソッドの型をチェックし、値を新しいList(Of String)に追加してから、オブジェクト配列ではなくリストを操作することです。

    Dim strElements As New List(Of String)        

    For Each element As Object In elements
        If element.GetType Is GetType(System.String) Then
            strElements.Add(element)
        ElseIf element.GetType Is GetType(System.Collections.Generic.List(Of String)) Then
            For Each s As String In element
                strElements.Add(s)
            Next
        End If
    Next

しかし、個々の文字列をParamArrayに直接追加するより良い方法があれば、それははるかに良いでしょう

于 2011-01-30T16:23:25.027 に答える
-2

Shevekの答えはうまくいきます。あとは、作成/入力したリストを、「strElements.ToArray」として parmarray を期待するメソッドに渡すだけです。これを使用して、次のように動的な数の列を DataGridView に入力しました (ループで、データの各行に対して新しい strElements リストを作成します): dgvData.Rows.Add(strElements.ToArray)

于 2015-06-26T09:05:25.503 に答える