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

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

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

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

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

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

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


person Rohit Vipin Mathews    schedule 02.03.2012    source источник


Ответы (4)


Да. Классическим примером будет 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

person hotS85    schedule 02.03.2012

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

Вот пример.

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

Дополнительную информацию можно найти здесь.

person recursive    schedule 02.03.2012

Да, параметры:

public void SomeMethod(params object[] args)

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

person Michael Stum    schedule 02.03.2012