Перегрузка метода C # против ключевого слова Param - PullRequest
1 голос
/ 21 января 2011

У меня есть метод: соответствующая часть ниже

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 ]

7 голосов
/ 21 января 2011

Вам не нужно цикл:

void Foo(params string[] args)
{
    tsk.run(String.Join(" ", args));
}
1 голос
/ 21 января 2011

Если вы знаете число аргументов, используйте перегрузку, поскольку это будет более эффективным.

Компилятор сможет напрямую вызывать правильный метод, и вы можете назначать значения по умолчанию.

Если список параметров создается динамически и может различаться по длине, используйте параметры.

Или в вашем примере пропустите params и просто используйте список строк или массив строк.

0 голосов
/ 21 января 2011

хорошо, вы можете сделать это, используя

(params object[] parameters)

, затем внутри метода создайте Strigbuilder и добавьте к нему каждый параметр из списка требуемым образом.

Неясно, соответствуют ли ваши параметрывсе строки, или они действительно различаются по типу и сигнатуре объекта.Если параметры различаются по типу, я думаю, что использование метода params с объектами создаст больше проблем, чем справки.

Если все они являются строками, я думаю, что params является идеальным решением для этой ситуации.

0 голосов
/ 21 января 2011

Как это:

void foo&ltT>(params T[] parameters)
{
    tsk.run(string.Join&ltT>(" ", parameters));
}
0 голосов
/ 21 января 2011
void foo( params string[ ] parameters )
{
    StringBuilder sb = new StringBuilder( );

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

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