構造体の引数に省略可能な引数を指定する

ページ作成日 :

「省略可能な引数」を使用することにより、引数の数の異なるメソッドをオーバーロードしなくても引数に初期値を与えることができるようになります。

しかし、省略可能な引数に指定できるのは「10」や「"Sample"」「null」などの定数のみであり、プログラム実行時に決定される new で作成したものや static readonly で定義された値などは指定できません。

構造体を引数に持つ場合も同様です。たとえば型が IntPtr の場合、IntPtr.Zero を初期値として指定することができません。0 を指定することもできませんし、構造体なので null を指定することもできません。(Nullable を使えば null を指定できますが、引数の型が変わるので除外します)

省略可能な引数として構造体を使用する場合は「default(T)」が使用できます。これは new T() で作成した値と同等になります。

public void DoAction(IntPtr handle = default(IntPtr))
{
  // 処理
}

あくまでも構造体の各値に 0 や null を指定できるだけですので、別途初期値を与えたい場合はメソッドをオーバーロードしてください。