J'ai couru dans un bug qui me dérangeait. J'avais Jobject que je pensais irait bien avec la chaîne était là et tout. Un complexe final devait passer à un p> juste pour voir ce qui se passe et ça marche. Ma question est de savoir comment puis-je savoir quand utiliser un .tostring () par opposition à une (chaîne) par opposition à une "chaîne". P> p>
3 Réponses :
Si l'objet est une chaîne code> code> ou un opérateur de distribution explicite à Sinon, cela vous donnera un Notez que vous pouvez dire ici P> qui définira si (chaîne) code>, il est acceptable de dire InvalidCastException code>. p> s code> sur null code> si obj ["rôle"] code> n'est pas une instance de chaîne code>. Notez que pour comme code>, des opérateurs de distribution explicites sont ignorés. strong> p> obj ["rôle"] n'est ni un String CODE> NOR Une instance d'une classe qui a un opérateur de distribution explicite à String code>, vous devez dire P> string s = obj["role"].ToString();
Tous les objets in .NET hérit de system.Object code> qui a un .tostring () code> méthode - je n'ai pas encore trouvé un objet qui lancera une référence null simplement pour appeler simplement pour appeler .tostring () code> dessus - avant i -1, pouvez-vous donner un exemple?
@Basiclife: si obj ["rôle"] code> est null code>, puis obj ["rôle"]. Tostring () code> lancera un NullReferenceException Code> Parce que nous essayons de désirer une référence null code>.
J'ai vu du code comme string S = (obj ["rôle"] ?? string.empty) .tostring (); code> pour éviter le NullReferenceException code>. Ne pouvait pas dire si c'est une bonne pratique ou non.
@Jason - alors c'est vraiment un problème d'index plutôt que d'un .tostring () code> problème - mais dans tout cas, bonne réponse, +1 :)
@Basiclife: Je veux dire, c'est une façon de regarder ça. Mais la grande chose est que j'ai rencontré beaucoup de personnes qui ont l'intuition que x.tostring () code> devrait renvoyer null code> (et dans certains cas chaîne .Empty code>) si x code> est null code>, ne réalisant pas qu'ils essaient de Derefence un null code> référence.
J'aime l'explication détaillée. Merci!
(chaîne) code> jette l'instance à la chaîne et il pourrait lancer une exception au moment de l'exécution si l'objet que vous essayez de lancer n'est pas une chaîne. Le comme code> opérateur tente également de lancer mais Cela ne jette pas une exception si l'instance n'est pas une chaîne mais retourne null. Et le tostring code> méthode Bien sûr vient de System.Object afin que cela dépendra de savoir si Tyhe sous-jacent de type l'a remplacé. P>
Cela ne devrait pas faire une différence dans votre exemple. Le seul scénario où il ferait la différence est s'il ya une conversion de type utilisateur (sur une chaîne code> code>) définie sur le type obj ["rôle"] code> est. Dans ce cas, il est peut-être que la distribution à une chaîne code> a changé sur un autre objet, sur lequel le .tostring () code> a été mis en œuvre différemment. P>