Посмотрите на этот пример проекта:
static void Main(string[] args)
{
//Error: The call is ambigious between the following methods or properties: ShowMessage(FirstClass), ShowMessage(SecondClass)
ShowMessage(null);
//Here it is known which type is being used
ShowMessage((FirstClass)null);
}
private static void ShowMessage(FirstClass value)
{
System.Console.WriteLine(value);
}
private static void ShowMessage(SecondClass value)
{
System.Console.WriteLine(value.ToString());
}
class FirstClass { }
class SecondClass { }
Для этого null
и (FirstClass)null
- это не одно и то же. С (FirstClass)null
вы явно определяете его как обнуляемый тип FirstClass
(class
обнуляется как ссылочный тип), который является нулевым. Другой null
просто ... хорошо null
и должен быть неявно приведен к нужному типу, допускающему значение Nullable.
Осторожно:
Если вы замените
ShowMessage(NotFirstClassObj as FirstClass)
с
ShowMessage(NotFirstClassObj is Firstclass ? (FirstClass)NotFirstClassObj : null)
Это все еще работает, потому что компилятор все еще может получить правильный тип. Но это может быть причиной того, что это (type)null
в документальном фильме.