24

params少なくとも1つの値を持つのパラメータを設定するにはどうすればよいですか?

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
}
4

4 に答える 4

41

ただ行う:

public void Foo(string first, params string[] s) { }
于 2012-05-04T08:58:10.863 に答える
8

paramsコンパイル時にそのような条件を指定することはできません。

ただし、実行時にこれを確認し、指定した条件が満たされない場合は例外をスローすることができます。

于 2012-05-04T09:13:02.440 に答える
1

コンパイル時に少なくとも1つのパラメータを要求する方法がありますが、それは本当にハッキーです。

  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.
    }
  }
于 2020-09-13T13:17:52.073 に答える
0

受け入れられた答えを完了するには:

public void Foo(string bar, params string[] bars)
{
    string[] strs = new string[] { bar }.Concat(bars).ToArray();
}
于 2022-01-27T14:27:54.587 に答える