2012-05-04 9 views
10

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

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 
} 

答えて

21

だけで実行します。

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

私はまたその回避策について考えました、そして、私はそれがきれいではないと思います。 'first'文字列は' string [] '_(もしあれば)_の反復の一部ではないため、場合によっては動作しない可能性があります。他の方法はありませんか? –

+2

しかし、あなたが言っていることは、あなたが常に*始めるための1つのパラメータを持つことになるということです。この解決法は、可能な限りきれいに反映されます。 – Nick

+11

@JohnIsaiahCarmona次に、それらを連結してください: 'new [] {first} .Concat(s)'。これで通常は結果をforeachすることができます。 –

4

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

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