2016-12-19 3 views
1

У меня есть простой вопрос. , если мы нанесли некоторую нулевую переменную в тип. Я ожидаю, что компилятор выкинет Some Exception, но это не так. И я действительно хочу знать причину. Я имею в видуПередача нулевого значения на тип

string sample1 = null as string; 
string sample2 = (string)null; 


object t1 = null; 
TestClass t2 = (TestClass)t1; 

может быть в первой, так как оператор обрабатывает обработку исключений. Но другие образцы должны исключать исключение. Как компилятор справляется с этими ситуациями, возможно, поскольку переменные равны нулю, он не выполняет операцию литья? Причина, если он действительно набросал нулевой указатель, должен быть ошибкой.

+8

Я не вижу здесь проблемы, все эти типы (скорее всего, имеют место в TestClass) имеют значение NULL, и поэтому можно было бы отличить –

+1

+1 @AlfieGoodacre, если приведение производится в reference-type ('class'), а не тип значения (' struct'). Тогда все должно быть хорошо. –

+0

строке может быть присвоен null i.e string str = null; – FaizanRabbani

ответ

2

В соответствии с: https://msdn.microsoft.com/en-us/library/ms173105.aspx (Явные преобразования) вы можете отличить от базового типа к производному типу.

С null является допустимым значением для всех ссылочных типов, если существует маршрут трансляции, вы должны быть в порядке.

object null ->TestClass null работает как object является суперклассом для всех ссылочных типов.

Однако, если вы пытаетесь string нуля ->TestClass нуля (Предполагается, что TestClass не является подтип string), вы найдете ошибку компиляции, как TestClass не производный типа string.