Mon problème avec cela est que vous perdez la sécurité du type. myInt pourrait être n'importe quoi. Rien ici ne dit de prendre un entier et de le convertir en chaîne. myInt peut être un objet et un objet ne peut pas être converti en chaîne. C'est connu au moment de la compilation, mais cela ne déclencherait même pas d'exception d'exécution, cela autoriserait simplement les données incorrectes.
Timothy Gonzalez
3
@TimothyGonzalez C'est un cas limite, si vous appelez .ToString (), c'est généralement parce que vous en avez besoin pour être une chaîne et cela peut être une chaîne.
EpicKip
35
@nfgallimore Ce n'est pas un cas de bord valide, ce n'est même pas un cas de bord dans cette situation. L'OP a déclaré qu'il avait un type int qu'il voulait convertir en chaîne. S'il s'agit d'un type int, la valeur est alors simple et simple. Le compilateur s'assurera que c'est le cas. Je ne sais même pas comment vous vous êtes rendu sur cette tangente. L'OP n'a pas demandé comment s'assurer qu'une référence aléatoire était un entier, puis la convertir en chaîne. Dans ce cas, vous avez peut-être raison, mais ce n'est pas le cas.
AaronM
1
Cette solution lève une exception pour les nullvaleurs.
Mehdi Dehghani
18
Les commentaires sur cette réponse sont ridicules.
524
string s = i.ToString();string s =Convert.ToString(i);string s =string.Format("{0}", i);string s = $"{i}";string s =""+ i;string s =string.Empty+ i;string s =newStringBuilder().Append(i).ToString();
vous pouvez aussi le fairestring count = "" + intCount;
Dion Dirza
2
Toutes ces solutions sont-elles également efficaces? J'imagine que i.ToString () fait de la boxe inutile de l'int, mais peut-être que c'est quand même optimisé.
Stephen Holt
43
.ToString()est le moyen le plus efficace d'effectuer la conversion. Toutes les autres méthodes présentées ici finiront par appeler de .ToString()toute façon.
Xavier Poinas
6
Je me sens un peu troublé par le fait que vous s
répétiez sans cesse
1
@XavierPoinas Bien qu'ils appellent "ToString ()" - cela dépend quelque peu de ce que vous comptez faire avec celui qui est le plus efficace. string s = "xyz" + i;créera une nouvelle chaîne "xyz" - créez la nouvelle chaîne contenant votre entier; puis créez une troisième chaîne qui contient les 2 concaténés. string.Format("xyz{0}", i);d'autre part, est capable de produire seulement 2 chaînes - car il les concatène en ligne. Cette performance devient plus perceptible à mesure que les cordes s'allongent.
UKMonkey
32
Juste au cas où vous voudriez la représentation binaire et que vous êtes toujours ivre de la soirée des dernières nuits:
privatestaticstringByteToString(intvalue){StringBuilder builder =newStringBuilder(sizeof(byte)*8);BitArray[] bitArrays =BitConverter.GetBytes(value).Reverse().Select(b =>newBitArray(new[]{b})).ToArray();foreach(bool bit in bitArrays.SelectMany(bitArray => bitArray.Cast<bool>().Reverse())){
builder.Append(bit ?'1':'0');}return builder.ToString();}
Remarque: quelque chose à propos de ne pas gérer très bien l'endianité ...
Edit: Si cela ne vous dérange pas de sacrifier un peu de mémoire pour la vitesse, vous pouvez utiliser ci-dessous pour générer un tableau avec des valeurs de chaîne pré-calculées:
staticvoidOutputIntegerStringRepresentations(){Console.WriteLine("private static string[] integerAsDecimal = new [] {");for(int i =int.MinValue; i <int.MaxValue; i++){Console.WriteLine("\t\"{0}\",", i);}Console.WriteLine("\t\"{0}\"",int.MaxValue);Console.WriteLine("}");}
Aucune des réponses n'a mentionné que la ToString()méthode peut être appliquée à des expressions entières
Debug.Assert((1000*1000).ToString()=="1000000");
même en littéraux entiers
Debug.Assert(256.ToString("X")=="100");
Bien que les littéraux entiers comme celui-ci soient souvent considérés comme un mauvais style de codage ( nombres magiques ), il peut y avoir des cas où cette fonctionnalité est utile ...
Cette réponse est apparue dans la file d'attente d'examen de faible qualité, probablement parce que vous n'avez pas expliqué le code. Si vous l'expliquez (dans votre réponse), vous êtes beaucoup plus susceptible d'obtenir plus de votes positifs - et le questionneur apprend en fait quelque chose!
The Guy with The Hat
5
@TheGuywithTheHat Vous remarquerez qu'aucune des réponses ici n'a d'explication sur le code, en particulier tous les exemples de code dans cette réponse très appréciée , car il est évident ce qu'ils doivent tous faire: convertir un int en une chaîne. En vérité, nous n'avons besoin de rien d'autre que la réponse acceptée - i.ToString- les autres ne sont là que pour être complets et amusants.
nmclean
2
L'absence d'explication dans les autres réponses ne signifie pas que toutes les réponses doivent manquer d'explication. La seule raison pour laquelle j'ai commenté cette réponse en particulier, c'est parce que je l'ai vue dans la file d'attente d'examen de faible qualité.
Le gars au chapeau
@TheGuywithTheHat Je ne disais pas que ma réponse peut être incomplète parce que d'autres le sont; Je dis qu'aucun d'entre eux ne l'est (y compris celui-ci) parce que l'intention est évidente dans le contexte de cette question.
nmclean
2
@reggaeguitar C'est surtout une réponse de plaisanterie, nous ajoutions volontairement des moyens de plus en plus obscurs de faire l'une des tâches les plus élémentaires. Mais à votre question, l'avantage de cette méthode serait si vous ne connaissiez pas les types à l'avance - au lieu de typeof(int)et typeof(string)vous pourriez avoir des variables de type et il trouverait et utiliserait un convertisseur approprié chaque fois qu'il en existe un.
null
valeurs.la source
string count = "" + intCount;
.ToString()
est le moyen le plus efficace d'effectuer la conversion. Toutes les autres méthodes présentées ici finiront par appeler de.ToString()
toute façon.s
string s = "xyz" + i;
créera une nouvelle chaîne "xyz" - créez la nouvelle chaîne contenant votre entier; puis créez une troisième chaîne qui contient les 2 concaténés.string.Format("xyz{0}", i);
d'autre part, est capable de produire seulement 2 chaînes - car il les concatène en ligne. Cette performance devient plus perceptible à mesure que les cordes s'allongent.Juste au cas où vous voudriez la représentation binaire et que vous êtes toujours ivre de la soirée des dernières nuits:
Remarque: quelque chose à propos de ne pas gérer très bien l'endianité ...
Edit: Si cela ne vous dérange pas de sacrifier un peu de mémoire pour la vitesse, vous pouvez utiliser ci-dessous pour générer un tableau avec des valeurs de chaîne pré-calculées:
la source
la source
La méthode ToString de tout objet est censée renvoyer une représentation sous forme de chaîne de cet objet.
la source
Plus loin dans la réponse de @ Xavier, voici une page qui fait des comparaisons de vitesse entre plusieurs façons différentes de faire la conversion de 100 itérations à 21 474 836 itérations.
Cela semble à peu près un lien entre:
la source
Dans certaines conditions, vous n'avez pas à utiliser
ToString()
la source
ou:
la source
Aucune des réponses n'a mentionné que la
ToString()
méthode peut être appliquée à des expressions entièresmême en littéraux entiers
Bien que les littéraux entiers comme celui-ci soient souvent considérés comme un mauvais style de codage ( nombres magiques ), il peut y avoir des cas où cette fonctionnalité est utile ...
la source
la source
i.ToString
- les autres ne sont là que pour être complets et amusants.typeof(int)
ettypeof(string)
vous pourriez avoir des variables de type et il trouverait et utiliserait un convertisseur approprié chaque fois qu'il en existe un.et vous pouvez faire de belles choses comme:
Le résultat sera:
la source