2011-12-05 5 views
0

申し訳ありませんが、これは間違った質問です。 VB.NETで何かを書く必要はありません。変数の数が関数に渡されます

しかし、 "name"という名前の変数を関数に渡していることがあります。時には1つの名前または2つの名前などであることもあります。関数名が1の場合はその名前をカンマで区切ります2つの名前はカンマを追加します。どれくらいの "名前"があるかを知る方法はありますか?

EDIT:私の質問を少し明確にするために私のodeを追加しました。以前はやっていないのは残念です。

マイコード:

Public Function GenerateCSV(byval str as string, byval str1 as string, byval str2 as string, byval GrpName as string) 
    IF GroupName <> GrpName THEN 
    GroupName = GrpName 
    CSVString = "" 
    END IF 
    IF str = "" 
    CSVString = "" 
    ELSE 
    CSVString = CSVString & str & ", " & str1 & ", " & str2 & ", " 
    END IF 
    return CSVString 
End function 

ありがとう!

+0

あなたの編集に反応しました。しかし、私は今質問があります。名前はいくつでもかまいませんか、それとも最大ですか? – Toast

+0

ありがとうございます。名前はいくつでも構いません。 –

答えて

1

リストまたは配列として渡します。これらを使用すると、アイテムの数を取得し、必要な処理を実行できます。

Public Function DoSomething(names As IEnumerable(Of String)) As String 
    'Include this if there is a possibility of an names containing nothing 
    If names.Count = 0 Then 
     Return "" 
    End If 

    Dim csvString As String = names(0) 

    'First one is already added, loop through remaining 
    For i As Integer = 1 To (names.Count - 1) 
     csvString = csvString + ", " + names(i) 
    Next 

    Return csvString 
End Function 

好ましくは、配列またはリストを取ることができるIEnumerableを使用します。必要ならIList(Of String)またはString()を使用することができます。

+0

構文上、あなたのパラメータはIEnumerable(Of String)であってはなりませんか? –

+0

はい、そうです。私はC#の人です。ありがとう。修正する。 – Toast

+0

私も - 私はVBがその構文をサポートしているかどうか本当に分かりませんでした。 :) –

0

なく、あなたが名前の変数をhandleingかどうかはわかりますが、あなたはこれが仕事ができる配列を使用している場合...

string FullName 

If name[1] != "" Then 
    FullName = name[0] + "," + name[1] 
End If 

私はまた、あなたが「名前」可変出力をしたいかわからないんだけど、この両方の名前をまとめてコンマで区切ります。フルネームの出力は、関数の入力の問題の明確化以下「名前、名前」

0

編集

編集することでしょう。以下のような

は(私はVBの人ではないんだけど)何か: -

Public Function GenerateCSV(byval str as string, byval str1 as string, byval str2  as  string, byval GrpName as string) 
    Dim strAll As String 
    Dim strArr() As String 
    Dim i As Integer 
    Dim outStr As New System.Text.StringBuilder 
    strAll = str + " " + str1 + " " + str2 
    strAll = strAll.Trim() 
    strArr = strAll.Split(" ") 
    For i = 0 To strArr.Length - 1 
     if i > 0 then 
      outStr.Append(",") 
     End If 
    outStr.Append(strArr(i)) 
    Next 
    return outStr.ToString 
End Function 

あなたがプロセスにParamArrayはを使用している場合、私はVBの男ができ、かなりこのアップ:)

0

確信していますパラメータの可変数は、あなたが行うことができます。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Debug.WriteLine(ProcessNames("name1", "name2")) 
    Debug.WriteLine(ProcessNames("name3")) 

End Sub 
:のように呼ばれることになる

Private Function ProcessNames(ByVal ParamArray asNames() As String) As String 

    Dim sbName As New System.Text.StringBuilder(100) 

    If asNames IsNot Nothing Then 
     For Each sName As String In asNames 
      If Not String.IsNullOrEmpty(sName) Then 
       If sbName.Length <> 0 Then 
        sbName.Append(", ") 
       End If 
       sbName.Append(sName) 
      End If 
     Next 
    End If 

    Return sbName.ToString 
End Function 

として出力を生成する:

name1, name2 
name3 

ProcessNamesはまた、空間のようないくつかのdelimterによって分離された複数の名前を含む文字列を処理するために使用することができる。

Debug.WriteLine(ProcessNames("name1 name2".Split(" "c))) 
    Debug.WriteLine(ProcessNames("name3".Split(" "c))) 

は出力を生成します

name1, name2 
name3 
関連する問題