Ответ 1
Func((Class1)null);
Компиляция следующего кода вернет ошибку 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);
Вставьте null
в тип:
Func((Class1)null);
Вы также можете использовать переменную:
Class1 x = null;
Func(x);
Использование as
для кастинга делает его более читаемым с той же функциональностью.
Func(null as Class1);
Методы Func()
принимают ссылочный тип как параметр, который может быть нулевым. Поскольку вы вызываете метод с явным значением null
, компилятор не знает, должен ли ваш null ссылаться на объект Class1
или объект Class2
.
У вас есть два варианта:
Передайте значение null в тип Class1
или Class2
, как в Func((Class1)null)
или Func((Class2)null)
Предоставить новую перегрузку метода Func()
, который не принимает никаких параметров, и вызвать эту перегрузку, если у вас нет явной ссылки на объект:
void Func()
{
// call this when no object is available
}
Вы должны иметь возможность передавать значение null в любое из этих значений, так же как и переменная Func((Class1)null)
.