相同类型的无穷方法参数
本文关键字:方法 参数 同类型 | 更新日期: 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。很高兴认识你
我希望这有助于……