25

次のコードをコンパイルするとThe call is ambiguous between the following methods or propertiesエラーが返されます。nullこれらのクラスのいずれにも明示的に変換できないため、どのように解決しますか?

static void Main(string[] args)
{
    Func(null);
}

void Func(Class1 a)
{

}

void Func(Class2 b)
{

}
4

7 に答える 7

38
Func((Class1)null);
于 2010-10-28T14:55:15.373 に答える
12

変数を使用することもできます。

Class1 x = null;
Func(x);
于 2010-10-28T15:00:15.770 に答える
11

タイプにキャストnull

Func((Class1)null);
于 2010-10-28T14:54:36.880 に答える
9

キャストに使用asすると、同じ機能で少し読みやすくなります。

Func(null as Class1);
于 2011-07-26T20:30:47.253 に答える
4

メソッドはFunc()、参照型をパラメーターとして受け入れますが、これはnullにすることができます。明示的な値を使用してメソッドを呼び出しているため、コンパイラーは、nullがオブジェクトまたはオブジェクトのどちらnullを参照しているのかを認識しません。Class1Class2

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

またはのように、Class1またはClass2タイプのいずれかにnullをキャストしますFunc((Class1)null)Func((Class2)null)

パラメータを受け入れないメソッドの新しいオーバーロードを提供しFunc()、明示的なオブジェクト参照がない場合はそのオーバーロードを呼び出します。

void Func()
{
    // call this when no object is available
}
于 2010-10-28T15:01:30.440 に答える
3

変数と同じように、これらのいずれかにnullをキャストできるはずですFunc((Class1)null)

于 2010-10-28T14:55:48.847 に答える
1

私が好む単なる代替ソリューション

static void Main(string[] args)
{
    Func(Class1.NULL);
}

void Func(Class1 a)
{ }

void Func(Class2 b)
{ }

class Class1
{
    public static readonly Class1 NULL = null;
}

class Class2
{
    public static readonly Class2 NULL = null;
}
于 2018-10-20T12:12:16.923 に答える