创建具有无限参数的方法?

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 中所示,它调用 SumThemAllint[] 调用 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 参数必须是最后一行。

【讨论】:

以上是关于创建具有无限参数的方法?的主要内容,如果未能解决你的问题,请参考以下文章

具有三个到无限参数的 bash 函数

使用 IMA sdk 创建无限大播放的最佳方法是啥?

如何为已知行数创建具有无限列的 Angular Material Design 表?

如何根据需要从以下父子结果集创建具有无限深度的多维数组

如何通过 Haskell 中的弱指针缓存构建具有重复消除的无限树

php 无限参数方法