相同类型的无限方法参数

时间:2012-01-03 20:24:34

标签: c# methods arguments

我记得我在某个地方有红色,你可以创建一个带有无穷无尽的参数的方法。问题是我不记得怎么做了。我记得它是这样的:

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

我确信有“...”。我记得当你拨打method时,你可以这样称呼它: method(3232);method(123,23,12); 如果有人理解我在说什么,请告诉我该怎么做。

3 个答案:

答案 0 :(得分:51)

您可以使用params关键字:

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

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

答案 1 :(得分:4)

你的意思是ParamArray ?(对于vb.net)

对于c#来说它似乎是params

答案 2 :(得分:1)

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

实现这样一个功能的简单方法就是:

1-定义你的功能,例如

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

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

第二个参数是您想要给出的无限参数的数量。你不必使用这个参数,如果你想计算一个开关中的占位符(比如%d,printf中的%f)-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

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

  
    

你好世界。很高兴见到你

  

我希望有帮助...