99

空の配列をデフォルトとして持つオプションの配列をとる関数をどのように定義しますか?

public void DoSomething(int index, ushort[] array = new ushort[] {},
 bool thirdParam = true)

結果:

'array'のデフォルトのパラメーター値は、コンパイル時定数でなければなりません。

4

3 に答える 3

145

オブジェクト参照のコンパイル時定数を作成することはできません。

使用できる唯一の有効なコンパイル時定数はですnull。したがって、コードを次のように変更します。

public void DoSomething(int index, ushort[] array = null,
  bool thirdParam = true)

そして、メソッド内でこれを行います。

array = array ?? new ushort[0];

(コメントから)C#8以降では、より短い構文を使用することもできます。

array ??= new ushort[0];
于 2010-08-13T20:22:17.173 に答える
27

配列を最後の引数にすることができる場合は、次のこともできます。

public void DoSomething(int index, bool wasThirdParam = true, params ushort[] array)

指定されていない場合、コンパイラは空の配列を自動的に渡します。配列を単一の引数として渡すか、要素を可変長の引数としてメソッドに直接配置するという柔軟性が追加されます。

于 2013-02-28T20:10:13.043 に答える
7

私はそれが古い質問であることを知っています、そしてこの答えはコンパイラによって課された制限を回避する方法を直接解決しませんが、メソッドのオーバーロードは代替手段です:

   public void DoSomething(int index, bool thirdParam = true){
        DoSomething(index, new ushort[] {}, thirdParam);
   }

   public void DoSomething(int index, ushort[] array, bool thirdParam = true){

      ...
   }
于 2013-04-05T23:03:17.983 に答える