77 votes

Différence entre .ToString et "as string" en C #

Quelle est la différence entre utiliser les deux déclarations suivantes? Il me semble que le premier "en tant que chaîne" est un transtypage de type, tandis que le second ToString est un appel réel à une méthode qui convertit l'entrée en une chaîne? Je cherche juste un aperçu, le cas échéant.

 Page.Theme = Session["SessionTheme"] as string;
Page.Theme = Session["SessionTheme"].ToString();
 

109voto

Philippe Leybaert Points 62715

si la Session["SessionTheme"] n'est pas une chaîne, "string", retourne null.

.ToString() va essayer de convertir n'importe quel autre type de chaîne par l'appel de l'objet .La méthode ToString (). Pour la plupart des types intégrés pour revenir à l'objet converti en une chaîne de caractères, mais pour les types personnalisés sans .La méthode ToString (), il sera de retour le nom du type de l'objet.

object o1 = "somestring";
object o2 = 1;

string s = o1 as string; // returns "somestring"
string s = o2 as string; // returns null
string s = o2.ToString(); // returns "1"

Une autre chose importante à garder à l'esprit est que si l'objet est null, appelant .ToString() lève une exception, mais "comme une chaîne de caractères" renvoie simplement la valeur null.

14voto

Wim Hollebrandse Points 8628

L' as mot clé sera essentiellement de vérifier si l'objet is une instance du type, à l'aide de MSIL opcode isinst sous le capot. Si elle l'est, elle retourne la référence de l'objet, sinon d'une référence null.

Il n'est pas, comme beaucoup le disent, essayez d'effectuer un cast en tant que tel - ce qui implique une certaine sorte de la gestion des exceptions. De ne pas faire.

ToString(), appelle simplement l'objet de l' ToString() méthode, que ce soit un programme personnalisé mis en œuvre par la classe (qui pour la plupart construits types effectue une conversion en chaîne de caractères) - ou si aucun ne contenait de la classe de base, objects', le retour des informations de type.

7voto

Oxymoron Points 667
 Page.Theme = Session["SessionTheme"] as string;
 

essaie de lancer une chaîne

tandis que

 Page.Theme = Session["SessionTheme"].ToString;
 

appelle la méthode tostring, qui peut être n'importe quoi. Cette méthode n'est pas convertie, elle devrait renvoyer une représentation sous forme de chaîne de cet objet.

4voto

this. __curious_geek Points 23728

Tout d'abord "tout-objet en tant que chaîne de caractères" et "tout-objet.ToString()" sont deux choses complètement différentes en fonction de leur contexte respectif.

string str = any-object as string;

1) Ce sera un cast d'un objet comme type de chaîne et si aucun objet n'est pas moulage à cordes, alors cette déclaration va retourner la valeur null sans jeter de l'exception.
2) C'est un compilateur-service.
3) Cela fonctionne assez bien pour toute autre type autre que chaîne de caractères, ex: vous pouvez le faire comme tout objet en tant qu'Employé, où un Employé est une classe définie dans votre bibliothèque.

string str = any-object.ToString();  

1) Cela appel à ToString() de tout objet de type defination. Depuis Que Le Système.Objet définit la méthode ToString() de toutes les classes .Net framework est la méthode ToString() pour plus de l'équitation. Le programmeur va l'emporter sur la ToString() dans une quelconque classe d'objet ou structure defination et écrire le code de retour de chaîne de caractères de la représentation de tout objet en fonction de la responsabilité et du rôle joué par n'importe quel objet.
2) Comme vous pouvez définir une classe à l'Employé et plus-ride méthode ToString() qui peut renvoyer des Employés de l'objet de représentation de chaîne comme "PRÉNOM - NOM de famille, EMP-CDOE" .

Notez que le programmeur a le contrôle sur ToString() dans ce cas et il n'a rien à voir avec le moulage ou la conversion de type.

1voto

Oded Points 271275

La vérification as string est que l'objet est une chaîne. Si ce n'est pas nul, il est retourné.

L'appel à ToString() appellera en effet la méthode ToString() sur l'objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X