Бесконечные аргументы метода одного типа
Я помню, что у меня где-то красное, что вы можете создать метод, который принимает бесконечные аргументы. Проблема в том, что я не помню, как это сделать. Я помню, что это было примерно так:
private void method(int arguments...)
{
//method body
}
Я уверен, что было "...
". И я помню, что когда вы вызываете method
, вы можете назвать это следующим образом:
method(3232);
или method(123,23,12);
Если кто-то понимает, о чем я говорю, скажите мне, как это сделать.
Ответы
Ответ 1
Вы использовали ключевое слово params:
private void method(params int[] arguments)
{
//method body
}
Вы можете вызвать свой метод следующим образом: method(1,2,3,4,5,6,7,8,9);
, и массив будет содержать эти числа. Ключевое слово params должно быть в массиве, и если это не единственный параметр в методе, он должен быть последним. Только один параметр может иметь объявление параметра.
Ответ 2
вы имеете в виду ParamArray? (для vb.net)
для С# кажется, что params
Ответ 3
Вы ищете определение бесконечного числа аргументов c/С++ для функции.
Вы можете увидеть здесь - http://www.cplusplus.com/reference/cstdarg/va_start/
Простым способом реализации такой функции является:
1- определите свою функцию, например
void logging(const char *_string, int numArgs, ...)
Первый аргумент - это строка, которую вы хотите использовать.
Второй аргумент - это количество бесконечных аргументов, которые вы хотите дать. Вам не нужно использовать этот параметр, если вы хотите подсчитать заполнители в коммутаторе (например,% d,% f в printf) -Hint: в цикле получить каждый char и посмотреть, является ли он вашим заполнителем -.
Я хочу сначала привести пример, как вы могли бы назвать такую функцию:
logging("Hello %0. %1 %2 %3", "world", "nice", "to", "meet you"); // infinite arguments are "world", "nice", ... you can give as much as you want
Как вы видите мои заполнители - цифры. Вы можете использовать все, что хотите.
2- Есть макросы, которые инициализируют переменную списка и получают значение аргумента:
va_list arguments; // define the list
va_start(arguments, numArgs); // initialize it, Note: second argument is the last parameter in function, here numArgs
for (int x = 0; x < numArgs; x++) // in a loop
{
// Note : va_arg(..) gets an element from the stack once, dont call it twice, or else you will get the next argument-value from the stack
char *msg = va_arg(arguments, char *); // get "infinite argument"-value Note: Second parameter is the type of the "infinite argument".
... // Now you can do whatever you want - for example : search "%0" in the string and replace with msg
}
va_end ( arguments ); // we must end the listing
Если вы замените каждый заполнитель на бесконечные значения аргументов и напечатаете новую строку, вы должны увидеть следующее:
Привет, мир. приятно познакомиться с вами
Я надеюсь, что это поможет...