次のメソッドまたはプロパティ間の呼び出しがあいまいです。質問する

次のメソッドまたはプロパティ間の呼び出しがあいまいです。質問する

次の 2 つの ctor があるとします。

public SomeClass(string a, Color? c = null, Font d = null)
        {
            // ...
        }

public SomeClass(string a, Font c = null, Color? d = null)
        {
            // ...
        }

~そして私はこうします:

SomeClass sc = new SomeClass("Lorem ipsum");

次のようなメッセージが表示されます: 「エラー 1 次のメソッドまたはプロパティ間の呼び出しがあいまいです [...]」

どちらを参照しても最終結果は同じなので、どちらを参照しても問題ないと思われます (少なくともこの特定のケースでは、私にとってはそれが今重要なすべてです)。では、これを回避するにはどのような選択肢があるでしょうか?

編集 1: @oltman: 簡略化された例。

ただ書けるようになりたい

[...] new SomeClass("Lorem", Color.Green)

の代わりに

[...] new SomeClass("Lorem", null, Color.Green)

ベストアンサー1

両方のコンストラクターは同じ数の引数を取りますが、順序が異なります。 2 つのコンストラクター パラメーターに既定値を指定しているため、2 番目の引数が指定されていない場合、コンパイラは 2 つのオーバーロードを区別できません。

既存のコンストラクターを削除し、次のものに置き換えることをお勧めします。

public SomeClass(string a, Color? color, Font font)
{
    // constructor implementation
}

public SomeClass(string a) : this(a, null, null) {}
public SomeClass(string a, Color color) : this(a, color, null) {}
public SomeClass(string a, Font font) : this(a, null, font) {}

おすすめ記事