Подтвердить что ты не робот

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

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

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

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

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

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

EDIT 2: вопрос не о необязательном параметре, но переменная Param

4b9b3361

Ответ 1

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

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

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

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

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

EDIT: После того, как я прочитал ваши изменения, я сделал свой. В приведенной ниже части также рассматриваются методы для получения переменного количества аргументов, но я думаю, что вы действительно искали способ 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

Ответ 2

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

Вот пример.

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

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

Ответ 3

Да, params:

public void SomeMethod(params object[] args)

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

Ответ 4

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

void DoSomething(params double[] parms)

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

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

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

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

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