至少具有一个值的 C# 参数

本文关键字:参数 有一个 具有一 | 更新日期: 2023-09-27 18:33:14

如何使params参数至少具有一个值?

public void Foo(params string[] s) { }
public void main()
{
    this.Foo(); // compile error
    this.Foo(new string[0]); // compile error
    this.Foo({ }); // compile error
    this.Foo("foo"); // no error
    this.Foo("foo1", "foo2"); // no error
}

至少具有一个值的 C# 参数

只需执行以下操作:

public void Foo(string first, params string[] s) { }

不能在编译时为params指定此类条件。

但是,您可以在运行时检查这一点,如果不满足指定的条件,则会引发异常。

有一种方法可以在编译时至少需要一个参数,但它真的很笨拙。

  public class RequireAtLeastOneParam {
    public string Foo(params string[] args) 
      => string.Join(' ', args);
    /// <summary>The purpose of this overload is to require at least one argument
    /// on any call to Foo. Because this overload exists, call with no arguments won't compile.</summary>
    public string Foo(params char[] args)
      => Foo(args.Select(x => x.ToString()).ToArray());
    public void WontCompile() {
      string foo = Foo(); // compilation fails because this is ambiguous between the two overloads.
    }
  }

要完成接受的答案:

public void Foo(string bar, params string[] bars)
{
    string[] strs = new string[] { bar }.Concat(bars).ToArray();
}