C#方法重载vs Param关键字

时间:2011-01-21 10:33:50

标签: c# overloading

我有一个方法:下面的相关部分

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 []然后循环,连接成一个字符串,然后将其运行?

5 个答案:

答案 0 :(得分:7)

你不需要循环:

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

答案 1 :(得分:1)

如果您知道参数的数量使用重载,因为它会更有效。

编译器将能够直接调用正确的方法,您可以指定默认值。

如果参数列表是动态创建的,并且长度可以变化更大,请使用参数。

或者在您的示例中跳过params并使用字符串列表或字符串数​​组。

答案 2 :(得分:0)

你可以通过使用

来做到这一点
(params object[] parameters)

然后在inside方法中创建一个Strigbuilder并以所需的方式将列表中的每个参数附加到它。

它不清楚你的参数是否都是字符串,或者它们实际上是各种类型和对象签名应该使用。如果参数因类型而异,我认为使用对象的params方法会产生比帮助更多的问题。

如果它们都是字符串,我认为params是解决这种情况的理想方法。

答案 3 :(得分:-1)

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

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

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

答案 4 :(得分:-1)

像这样:

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