Convertir int en chaîne?


499

Comment puis-je convertir un inttype de données en un stringtype de données en C #?

Réponses:


741
string myString = myInt.ToString();

4
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 = new StringBuilder().Append(i).ToString();

6
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:

private static string ByteToString(int value)
{
    StringBuilder builder = new StringBuilder(sizeof(byte) * 8);
    BitArray[] bitArrays = BitConverter.GetBytes(value).Reverse().Select(b => new BitArray(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:

static void OutputIntegerStringRepresentations()
{
    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("}");
}


14

La méthode ToString de tout objet est censée renvoyer une représentation sous forme de chaîne de cet objet.

int var1 = 2;

string var2 = var1.ToString();

10

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:

int someInt = 0;
someInt.ToString(); //this was fastest half the time
//and
Convert.ToString(someInt); //this was the fastest the other half the time

9
string str = intVar.ToString();

Dans certaines conditions, vous n'avez pas à utiliser ToString()

string str = "hi " + intVar;


4

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 ...


3
using System.ComponentModel;

TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
string s = (string)converter.ConvertTo(i, typeof(string));

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.
nmclean

1
string s = "" + 2;

et vous pouvez faire de belles choses comme:

string s = 2 + 2 + "you" 

Le résultat sera:

"4 vous"

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.