web-dev-qa-db-fra.com

Convertir une valeur nulle en un type

J'ai une question simple. si nous convertissons une variable nulle en un type. Je m'attends à ce que le compilateur lève une exception, mais ce n'est pas le cas. Et je veux vraiment savoir pourquoi. je veux dire

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


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

peut-être dans le premier, car l'opérateur gère la gestion des exceptions. Mais d'autres échantillons doivent lever l'exception. Comment le compilateur gère ces situations, peut-être que puisque les variables sont nulles, il n'effectue pas d'opération de transtypage? Parce que s'il jette vraiment un pointeur nul, ce doit être une erreur.

13
UfukSURMEN

Selon la documentation (Conversions explicites) vous pouvez convertir un type de base en un type dérivé.

Puisque null est une valeur valide pour tous les types de référence, tant que la route de transtypage existe, tout devrait bien se passer.

object null → TestClass null fonctionne comme object est une superclasse pour tous les types de référence.

Cependant, si vous essayez string null → TestClass null (en supposant que TestClass n'est pas un sous-type de string), vous trouverez une erreur de compilation sous la forme TestClass n'est pas un type dérivé de string.

19
Stephan