次のコードをコンパイルすると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)
{
}
次のコードをコンパイルすると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)
{
}
Func((Class1)null);
変数を使用することもできます。
Class1 x = null;
Func(x);
タイプにキャストnull
:
Func((Class1)null);
キャストに使用as
すると、同じ機能で少し読みやすくなります。
Func(null as Class1);
メソッドはFunc()
、参照型をパラメーターとして受け入れますが、これはnullにすることができます。明示的な値を使用してメソッドを呼び出しているため、コンパイラーは、nullがオブジェクトまたはオブジェクトのどちらnull
を参照しているのかを認識しません。Class1
Class2
2つのオプションがあります。
またはのように、Class1
またはClass2
タイプのいずれかにnullをキャストしますFunc((Class1)null)
Func((Class2)null)
パラメータを受け入れないメソッドの新しいオーバーロードを提供しFunc()
、明示的なオブジェクト参照がない場合はそのオーバーロードを呼び出します。
void Func()
{
// call this when no object is available
}
変数と同じように、これらのいずれかにnullをキャストできるはずですFunc((Class1)null)
。
私が好む単なる代替ソリューション
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;
}