2011-01-21 34 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是这种情况的理想解决方案。