Создание методов с бесконечными параметрами? - PullRequest
53 голосов
/ 12 марта 2010

В C # вы можете сделать это:

foo = string.Format("{0} {1} {2} {3} ...", "aa", "bb", "cc" ...);

Этот метод Format() принимает бесконечные параметры, являясь первым способом форматирования строки, а остальные - значениями, которые должны быть помещены в строку.

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

Q: Как создать функцию, которая принимает бесконечные параметры? И как мне это использовать?

Ответы [ 8 ]

89 голосов
/ 12 марта 2010

С ключевым словом params.

Вот пример:

    public int SumThemAll(params int[] numbers)
    {
        return numbers.Sum();
    }

    public void SumThemAllAndPrintInString(string s, params int[] numbers)
    {
        Console.WriteLine(string.Format(s, SumThemAll(numbers)));
    }

    public void MyFunction()
    {
        int result = SumThemAll(2, 3, 4, 42);
        SumThemAllAndPrintInString("The result is: {0}", 1, 2, 3);
    }

Код показывает разные вещи. Прежде всего, аргумент с ключевым словом params всегда должен быть последним (и может быть только один для каждой функции). Кроме того, вы можете вызвать функцию, которая принимает аргумент params, двумя способами. Первый способ показан в первой строке MyFunction, где каждое число добавляется в качестве одного аргумента. Однако его также можно вызывать с помощью массива, как показано в SumThemAllAndPrintInString, который вызывает SumThemAll, а int[] называется numbers.

19 голосов
/ 12 марта 2010

Используйте ключевое слово params. Использование:

public void DoSomething(int someValue, params string[] values)
{
    foreach (string value in values)
        Console.WriteLine(value);
}

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

6 голосов
/ 12 марта 2010

Несколько заметок.

Параметры должны быть отмечены в типе массива, например в строке [] или объекте [].

Параметр, помеченный w / params, должен быть последним аргументом вашего метода. Foo (строка input1, object [] items), например.

3 голосов
/ 12 марта 2010
    public static void TestStrings(params string[] stringsList)
    {
        foreach (string s in stringsList){ } 
            // your logic here
    }
3 голосов
/ 12 марта 2010

Этого можно добиться, используя ключевое слово params .

Маленький пример:

public void AddItems(params string[] items)
{
     foreach (string item in items)
     { 
         // Do Your Magic
     }
}
3 голосов
/ 12 марта 2010

используйте ключевое слово params.Например

static void Main(params string[] args)
{
    foreach (string arg in args)
    {
        Console.WriteLine(arg);
    }
}
1 голос
/ 12 марта 2010
function void MyFunction(string format, params object[] parameters) {

}

InstaD объекта [] вы можете использовать любой тип, который вам нравится. Аргумент params всегда должен быть последним в строке.

1 голос
/ 12 марта 2010
 public string Format(params string[] value)
 {
            // implementation
 }

Используется ключевое слово params

...