5

これは私が今までに考えるべきだったもののように思えますが、そうではありません。また、これを行う既存の方法が必要なようです。

問題: いくつかのコンストラクタを持つクラスがあるとします

public class ModuleAction
{
    public ModuleAction(string url, string caption)
    { ... }

    public ModuleAction(string url, ModuleAction action)
    { ... }
}

そして、他の場所で、これらのコンストラクターの 1 つを呼び出しますが、2 番目の引数が null であり、使用するコンストラクターがわかりません。

ModuleAction action = new ModuleAction("http://google.co.uk", null);

これを行う方法はありますか?私の現在の解決策は、未使用の引数をコンストラクターの 1 つに追加することですが、それは正しくないようです。

私の解決策:(きれいではない)

public class ModuleAction
{
    public ModuleAction(string url, string caption, bool unused)
    { ... }

    public ModuleAction(string url, ModuleAction action)
    { ... }
}
4

6 に答える 6

12

ここにはいくつかのオプションがあります。

null簡単で直接的な解決策は、使用したいオーバーロードの引数の型にキャストすることです。

ModuleAction action = new ModuleAction("http://google.co.uk", (string)null);

より良いオプションは、単一のパラメーターを持つ新しいコンストラクターを使用し、デフォルトを使用してそれをチェーンすることです。

public ModuleAction(string url) : this(url, "")
于 2013-06-14T11:21:51.750 に答える
3

次の 3 つのオプションがあります。

  1. null を適切な型にキャストできます。
  2. null を渡す代わりに、引数を 1 つだけ取り、それを使用するコンストラクターを提供できます。
  3. 名前付きパラメーターを使用できます。
于 2013-06-14T11:23:05.753 に答える
2

2 番目の引数を持たないコンストラクターを作成します。

public ModuleAction(string url) 
{ ... }

次に、2 番目の引数を指定できない場合にどちらが使用されるかは明らかです。

于 2013-06-14T11:22:06.777 に答える
2

どうですか

new ModuleAction("uu", (string)null);
new ModuleAction("uu", (ModuleAction)null);

?

于 2013-06-14T11:23:29.090 に答える