2012-09-26 2 views
9

一例では、この方法では、デフォルトのパラメータ値を使用することが可能である:C#でメソッドのパラメータ配列のデフォルト値

public void SomeMethod(String someString = "string value") 
{ 
    Debug.WriteLine(someString); 
} 

しかし、今私は、メソッドのパラメータとして配列を使用して、設定したいですそのデフォルト値。

public void SomeMethod(String[] arrayString = {"value 1", "value 2", "value 3"}) 
{ 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 

をしかし、これは動作しません:
私はそれが次のようになります考えていました。
これを行う正しい方法はありますか、これがまったく可能であれば?

+0

"動作しない" を定義します。 – Tudor

+0

参照型の回避策があります。引数のデフォルトを "null"に設定します。次に、コードブロック内でパラメータがnullに設定されているかどうかを確認し、nullの場合は参照タイプパラメータのデフォルト値を設定します。 –

答えて

15

これを行う正しい方法はありますか、これがまったく可能であればですか?

デフォルト値は(Optional Argumentsから)次のいずれかでなければならないので、これは(直接に)不可能である。

  • 定数式。
  • 新しいValType()の形式の式。ここで、ValTypeは値型(enumやstructなど)です。
  • デフォルトのフォーム(ValType)の式.ValTypeは値タイプです。

配列の作成は、オプションの引数のデフォルト値のいずれにも当てはまりません。ここ

最良のオプションは、過負荷を作ることです。

public void SomeMethod() 
{ 
    SomeMethod(new[] {"value 1", "value 2", "value 3"}); 
} 


public void SomeMethod(String[] arrayString) 
{ 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 
+0

ありがとう、ありがとう。私はこれで行くだろう。私は約11分でこれを私の答えとして受け入れます。 –

10

はこれを試してみてください:

public void SomeMethod(String[] arrayString = null) 
{ 
    arrayString = arrayString ?? {"value 1", "value 2", "value 3"}; 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 
someMethod(); 
+0

入力いただきありがとうございます。それは良い方法のように思えますが、私はReedの答えをこの1つに固執するつもりです。なぜなら、それは私にとっては他のやり方でも便利だからです。 –

+3

+1これはすっきりしたアプローチですが、null *明示的に*渡すユーザーとそのパラメーターを使用しないユーザーを区別する方法はありません(そのため、通常はオーバーロードの方法が好まれます)。この場合重要であるかもしれないし、重要でないかもしれない。 –

+0

ようこそ。 – Nathan

関連する問題