2011-01-21 11 views
1

のParamキーワード対:今tsk.runとパラメータC#メソッドオーバーロード私は方法有する

void foo(various parameters) 
{ 
    tsk.run(various parameters); 
} 

以下関連部分のような間隔を置いて配置する必要があります

tsk.run(param 1 + " " param2 + " " param3);, etc depending on how many parameters. 

パラメータが1つを形成しますコマンドラインアプリケーションで使用される連続した文字列。

ほとんどの場合、4つのパラメータが存在するため、それぞれに対してオーバーロードメソッドを実行することをお勧めします。または、Paramキーワードを使用してパラメータを取得し、tsk.run()メソッドに追加する方法があります。

param []を使用してループし、文字列に連結して実行することは価値がありますか?

答えて

7

あなたはループする必要はありません:あなたはそれがより効率的になるように引数の数がオーバーロードを使用して知っている場合

void Foo(params string[] args) 
{ 
    tsk.run(String.Join(" ", args)); 
} 
+0

ニース、私はちょっと便利なことを学んだだけです。ありがとう!私はストリングを今まで知っていると思った。 – magnattic

+0

実際にはそのtsk.run(String.Join( ""、args)); –

+0

@Valentin Haha oops! –

-1
void foo(params string[ ] parameters) 
{ 
    StringBuilder sb = new StringBuilder(); 

    foreach (string parameter in parameters) 
    { 
     sb.Append(parameter); 
     sb.Append(" "); 
    } 

    tsk.run(sb.ToString()); 
} 
+2

init sb first;) –

+0

もちろん:Dああ、ハッハッハッハッハッハッハッハッ! – Nick

+0

'string.Join'を使うほうが良いです。その醜い後続の区切り文字は得られません;) –

1

を。

コンパイラは正しいメソッドを直接呼び出すことができ、デフォルト値を割り当てることができます。

paramlistが動的に作成され、さらに長さが異なる場合は、paramsを使用します。

例では、パラメータをスキップし、文字列リストまたは文字列配列を使用します。

 
void foo&ltT>(params T[] parameters) 
{ 
    tsk.run(string.Join&ltT>(" ", parameters)); 
} 
-1

パラメータがすべて文字列であるか、タイプによって実際にさまざまであり、オブジェクトの署名が使用されるべきかどうかは不明です。パラメータがタイプによって異なる場合は、オブジェクトを持つparamsメソッドを使用すると、ヘルプよりも多くの問題が発生すると思います。

これらがすべての文字列の場合、私はparamsがこの状況に最適な解決策だと思います。

0

だけでなく、あなたが

(params object[] parameters) 

を使用して、メソッドの内部でStrigbuilderを作成し、必要な形式でリストからそれにそれぞれのparamを追加することを行うことができます:このように

関連する問題