8
votes

Pourquoi null String n'est pas un objet de chaîne

Considérez ce code:

  class Program
        {
            static void Main(string[] args)
            {

                string s = null; 
                bool b = s is string;
                Console.WriteLine(b);
            }
        }


8 commentaires

S n'est pas une chaîne, c'est une référence null. Si cela faisait référence à quelque chose, que quelque chose serait une chaîne.


Cependant 'bool b = typeof (s) est une chaîne;' donnerait le résultat attendu


non je ne reçois pas de référence null


Permettez-moi de poser une question d'assistance: quelle est la classe du null ?


Lire Quelle est la signification de IS est par Eric Lippert :)


Voir msdn.microsoft.com/en-us/ Bibliothèque / scekt9xw (v = vs.71) .aspx


Il y a une différence entre est dans la langue anglaise et est dans la langue de programmation C #.


@DAVESHAW YESSSSSSSSSSSSSS


3 Réponses :


1
votes

La variable s est une référence qui peut potentiellement pointer sur l'emplacement d'une chaîne en mémoire, mais vous ne l'avez pas encore signalé à une chaîne. Il pointe de "null". Lorsque vous demandez s est la chaîne que vous dites "Est-ce que la référence s pointe vers l'emplacement d'une chaîne en mémoire 'et dans votre cas, la réponse est" non ". / p>


0 commentaires

0
votes

Le mot clé NULL est un littéral qui représente une référence nulle, celle qui ne fait référence à aucun objet . .

http://msdn.microsoft.com/en-us/library/ edakx9da.aspx

s est la chaîne est false car s ne fait pas référence une instance de String - s est null.


0 commentaires

4
votes

Lors de l'évaluation de votre déclaration, le temps d'exécution doit d'abord suivre forte> la référence à laquelle la variable se réfère. Ce n'est qu'alors qu'elle puisse évaluer l'objet référencé pour déterminer s'il s'agit bien d'une chaîne.

depuis un null code> référence référence à aucun objet, ce n'est pas une chaîne. En fait, ce n'est rien du tout. P>

Vous pouvez utiliser l'opérateur typeof code> pour obtenir l'objet type code> correspondant à la chaîne plutôt que de comparer un Objet référencé, si c'est votre objectif ultime. P>

Ceci est en fait l'exemple particulier donné par Eric Lippert dans un article de blog sur ce sujet très sujet: P>

J'ai remarqué que l'opérateur est incompatible dans C #. Vérifiez ceci: p>

string s = null; // Clearly null is a legal value of type string
bool b = s is string; // But b is false!


2 commentaires

Je ne vois pas comment le type de type de serait de toute aide dans cette situation.


@ M-Y Si le OP recherche le type objet de chaîne, il peut utiliser typeof au lieu du est opérateur.