【问题标题】:How to using params keyword with [Optional]? [duplicate]如何在 [Optional] 中使用 params 关键字? [复制]
【发布时间】:2018-01-20 00:18:13
【问题描述】:

如何在 [Optional] 中使用 params 关键字?
我想同时使用关键字 params 和 Optional 但它会引发错误

public void m( int x,[Optional] int c,params string [] arr)
{
    Console.WriteLine("x= {0}", x);        
    foreach (string item in arr)
    {
        Console.WriteLine("name ={0}\n",item);
    }
    public static void Main(){
    Program x = new Program();
    x.m(10,"mido","sfs","sgsd"); // here error why?
}

【问题讨论】:

  • 您遇到的错误是什么?
  • 调用方法时,不能选择不为可选参数 (c) 提供参数,但为后面的参数提供参数。
  • 更好的解决方案是使用两种方法,一种带有可选参数(这样就不是可选的),另一种没有
  • 另外一个可能的解决方案是将可选参数标记为 Nullable。然后您可以在代码中检查该值
  • 基本上params必须在最后,并且 optional 后面不能跟非可选的,否则可能会产生歧义。根据这些规则,您不能将它们一起使用。相反,只需创建多个重载。

标签: c# .net


【解决方案1】:

我不太确定该关键字,但是如果您将可选参数传递给您的类,则需要设置默认值。此外,重要的是要记住 可选 参数不能 后跟 非可选 参数。在您的示例中,您的可选参数后跟一个非可选字符串数组。

一个例子:

public void ExampleMethod(int required, string optionalstr = "default string",
    int optionalint = 10)

阅读更多:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments

【讨论】:

  • 可选参数后面不能跟非可选参数,这是这里的问题。
  • @juharr 我的示例包含 3 个按必需、可选和可选顺序排列的参数。再看一遍。这甚至不是我的榜样。直接来自 MSDN。
  • 您的示例很好,但请注意,OP 在可选参数之后有一个非可选参数。
  • @juharr 哦,好点。你最初的措辞很混乱。我现在已将其添加到我的答案中。
猜你喜欢
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2014-12-30
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多