次のコードをコンパイルすると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を参照しているのかを認識しません。Class1Class2
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;
}