2011-01-21 21 views
1

我有一個方法:下面C#方法重載VS帕拉姆關鍵字

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

現在用tsk.run參數相關部分需要隔開這樣:

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

的參數將形成一個在命令行應用程序中使用的連續字符串。

最多會有4個參數,所以最好爲每個參數做一個超載方法。或者有沒有辦法使用Param關鍵字來獲取參數並將它們添加到tsk.run()方法中。

是否值得使用param [],然後循環,連接成一個字符串,然後將其放入運行?

回答

7

你不需要循環:

void Foo(params string[] args) 
{ 
    tsk.run(String.Join(" ", args)); 
} 
-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;) – 2011-01-21 10:39:03

+0

當然:D啊哈哈哈 - 打字太快了! – Nick 2011-01-21 10:40:09

1

如果你知道的參數個數超負荷使用,因爲它會更有效率。

編譯器將能夠直接調用正確的方法,並且可以指定默認值。

如果參數列表是動態創建的,並且長度可能會有所不同,請使用參數。

或者在你的例子中跳過參數,只使用一個字符串列表或字符串數​​組。

-1

像這樣:

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

以及你能做到這一點,通過使用

(params object[] parameters) 

然後裏面方法創建一個Strigbuilder,並從列表中的每個PARAM追加到它在您需要的時尚。

它不清楚你的參數是否都是字符串,或者它們是不同類型的,並且應該使用對象簽名。如果參數根據類型不同,我認爲使用對象的參數方法會產生更多的問題而不是幫助。

如果他們都是字符串,我認爲PARAMS是這種情況的理想解決方案。