创建具有无限参数的方法?
Posted
技术标签:
【中文标题】创建具有无限参数的方法?【英文标题】:Creating methods with infinite parameters? 【发布时间】:2011-01-27 00:06:09 【问题描述】:在 C# 中你可以这样做:
foo = string.Format("0 1 2 3 ...", "aa", "bb", "cc" ...);
此方法Format()
接受无限参数,作为第一个应该如何格式化字符串的参数,其余的是要放入字符串中的值。
今天我遇到了一种情况,我必须获取一组字符串并对其进行测试,然后我想起了这种语言功能,但我不知道。在几次不成功的网络搜索之后,我意识到只获取一个数组会更谨慎,但这并没有让我很满意。
问:如何制作一个接受无限参数的函数?以及如何使用它?
【问题讨论】:
infinite...这是很多参数。你试过了吗? 学究点,绝不是“无限”;但任何 sane 代码都应该没问题。 如果有人有无限的记忆,我会感到惊讶。我想要一些! @Christian.K 我认为这样更清楚,因为这是我最初的问题,可能更容易与其他人可能遇到的类似疑问联系起来。而且(一般来说)这是一种创建重载的虚拟方式(如果你把其中一个弄错了,Visual Studio 会抱怨说“没有一个重载接受这些参数”或类似的东西) @MarceloRamires:我试图指出这样一个事实,即“params”关键字,这就是您给出的示例的全部内容,与任何其他参数列表一样,与重载有关方法,而是允许使用“无限项”的 array 调用方法。但说真的,这是你的问题,所以如果标题说明你想知道/问什么,一定要保持这样(我可能误解了,很公平:-) 【参考方案1】:使用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
。
【讨论】:
@MarceloRamires:点击链接。无论如何,我无法比文档更好地解释它;-) 其实可以;这个解释只是两行加上一个例子。并不是说文档不够好,只是说如果您愿意,可以更好地解释它。 @MarceloRamires:string.Format("0 1 2 3", "aa", "bb", "cc")
看起来像 Format(params object[] args)
其中 args = "aa", "bb", "cc"。有意义吗?
@MarceloRamires 我已经详细说明了。希望这是有道理的。
如果您将string.Format
删除为Console.WriteLine(s, SumThemAll(numbers))
,情况是否相同?【参考方案2】:
使用 params 关键字。用法:
public void DoSomething(int someValue, params string[] values)
foreach (string value in values)
Console.WriteLine(value);
使用 params 关键字的参数总是在最后。
【讨论】:
最后应该是无限值吧?如果我想要一个整数,它必须在开头,对吗? @MarceloRamires - 正确,它必须在末尾。 @MarceloRamiers - 你的方法看起来像 public void DoSomething(int myvalue, params string[] values)【参考方案3】:一些笔记。
需要在数组类型上标记参数,例如 string[] 或 object[]。
标记为 w/ params 的参数必须是方法的最后一个参数。以 Foo(string input1, object[] items) 为例。
【讨论】:
【参考方案4】:使用params
关键字。例如
static void Main(params string[] args)
foreach (string arg in args)
Console.WriteLine(arg);
【讨论】:
谢谢,但是……“我该如何使用它?”【参考方案5】:您可以通过使用params 关键字来实现此目的。
小例子:
public void AddItems(params string[] items)
foreach (string item in items)
// Do Your Magic
【讨论】:
【参考方案6】: public static void TestStrings(params string[] stringsList)
foreach (string s in stringsList)
// your logic here
【讨论】:
【参考方案7】: public string Format(params string[] value)
// implementation
使用了params关键字
【讨论】:
【参考方案8】:function void MyFunction(string format, params object[] parameters)
instad of object[] 你可以使用任何你喜欢的类型。 params 参数必须是最后一行。
【讨论】:
以上是关于创建具有无限参数的方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何为已知行数创建具有无限列的 Angular Material Design 表?