Подтвердить что ты не робот

Как разрешить двусмысленность, когда аргумент равен нулю?

Компиляция следующего кода вернет ошибку 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)
{

}
4b9b3361

Ответ 1

Func((Class1)null);

Ответ 2

Вставьте null в тип:

Func((Class1)null);

Ответ 3

Вы также можете использовать переменную:

Class1 x = null;
Func(x);

Ответ 4

Использование as для кастинга делает его более читаемым с той же функциональностью.

Func(null as Class1);

Ответ 5

Методы Func() принимают ссылочный тип как параметр, который может быть нулевым. Поскольку вы вызываете метод с явным значением null, компилятор не знает, должен ли ваш null ссылаться на объект Class1 или объект Class2.

У вас есть два варианта:

Передайте значение null в тип Class1 или Class2, как в Func((Class1)null) или Func((Class2)null)

Предоставить новую перегрузку метода Func(), который не принимает никаких параметров, и вызвать эту перегрузку, если у вас нет явной ссылки на объект:

void Func()
{
    // call this when no object is available
}

Ответ 6

Вы должны иметь возможность передавать значение null в любое из этих значений, так же как и переменная Func((Class1)null).