相同类型的无穷方法参数

本文关键字:方法 参数 同类型 | 更新日期: 2023-09-27 18:19:25

我记得我在某个地方写过,你可以创建一个接受无穷参数的方法。问题是我不记得怎么做了。我记得大概是这样的:

private void method(int arguments...)
{
//method body
}

我确定有"..."。我记得当你叫method的时候你可以这样叫它:method(3232);method(123,23,12);如果有人明白我在说什么,请告诉我怎么做。

相同类型的无穷方法参数

您可以使用关键字params:

private void method(params int[] arguments) 
{ 
    //method body 
}

你可以像这样调用你的方法:method(1,2,3,4,5,6,7,8,9);,数组将包含这些数字。params关键字必须在一个数组中,如果它不是方法中唯一的参数,那么它必须是最后一个。只有一个参数可以有参数声明

你是说ParamArray ?(vb.net)

对于c#,它似乎是params

您正在寻找c/c++定义的无限数量的参数到一个函数。你可以在这里看到- http://www.cplusplus.com/reference/cstdarg/va_start/

实现这样一个函数的简单方法如下:

1-定义你的函数,例如

void logging(const char *_string, int numArgs, ...)

第一个参数是要使用的字符串。

第二个参数是你想要给出的无限参数的个数。如果你想计数一个开关中的占位符(比如printf中的%d, %f),你不必使用这个参数。提示:在循环中获取每个字符并查看它是否为你的占位符。

我想先给出一个如何调用这样一个函数的例子:

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-有宏,用于初始化list变量并获取参数的值:

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

如果用无限参数值替换每个占位符并打印新字符串,您应该看到如下内容:

Hello world。很高兴认识你

我希望这有助于……