Поддерживает ли C # переменное количество аргументов и как? - PullRequest
44 голосов
/ 02 марта 2012

Поддерживает ли C # переменное число аргументов?

Если да, как C # поддерживает переменную no аргументов?

Какие примеры?

Чем полезны переменные аргументы?

РЕДАКТИРОВАТЬ 1 : Каковы ограничения на это?

РЕДАКТИРОВАТЬ 2 : Вопрос не в необязательном параметре, а в переменном параметре

Ответы [ 4 ]

68 голосов
/ 02 марта 2012

Да. Классическим примером будет params object[] args:

//Allows to pass in any number and types of parameters
public static void Program(params object[] args)

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

Ограничения:

  • Для одного метода допускается только одно params ключевое слово
  • Это должен быть последний параметр.

РЕДАКТИРОВАТЬ: После того, как я прочитал ваши правки, я сделал свои. Часть ниже также охватывает методы для получения переменного числа аргументов, но я думаю, что вы действительно искали способ params.


Также один из более классических, называется метод перегрузки . Вы, наверное, уже много их использовали:

//both methods have the same name and depending on wether you pass in a parameter
//or not, the first or the second is used.
public static void SayHello() {
    Console.WriteLine("Hello");
}
public static void SayHello(string message) {
    Console.WriteLine(message);
}

Последний, но не менее важный: Необязательные аргументы

//this time we specify a default value for the parameter message
//you now can call both, the method with parameter and the method without.
public static void SayHello(string message = "Hello") {
    Console.WriteLine(message);
}

http://msdn.microsoft.com/en-us/library/dd264739.aspx

15 голосов
/ 02 марта 2012

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

Вот пример.

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

Здесь больше информации здесь .

11 голосов
/ 02 марта 2012

Да, params :

public void SomeMethod(params object[] args)

params должен быть последним аргументом и может иметь любой тип.Не уверен, должен ли это быть массив или просто IEnumerable.

7 голосов
/ 02 марта 2012

Полагаю, вы имеете в виду переменное число параметров метода . Если так:

void DoSomething(params double[] parms)

(или смешанный с фиксированными параметрами)

void DoSomething(string param1, int param2, params double[] otherParams)

Ограничения:

  • Все они должны быть того же типа (или дочернего типа), что и для массивов
  • Может быть только один для каждого метода
  • Они должны быть последними в списке параметров

Это все, что я могу думать в данный момент, хотя могут быть и другие. Проверьте документацию для получения дополнительной информации.

...