Convertir int a cadena?

499

¿Cómo puedo convertir un inttipo de datos en un stringtipo de datos en C #?

La peor sombra
fuente

Respuestas:

741
string myString = myInt.ToString();
Anthony Pegram
fuente
44
Mi problema con esto es que pierdes la seguridad del tipo. myInt podría ser cualquier cosa. Nada aquí dice tomar un número entero y convertirlo en una cadena. myInt podría ser un objeto y un objeto no se puede convertir en una cadena. Eso se sabe en tiempo de compilación, pero ni siquiera generaría una excepción de tiempo de ejecución, solo permitiría datos incorrectos.
Timothy Gonzalez
3
@TimothyGonzalez Ese es un caso extremo, si llamas a .ToString () es generalmente porque necesitas que sea una cadena y puede ser una cadena.
EpicKip
35
@nfgallimore No es un caso límite válido, ni siquiera es un caso límite en esta situación. El OP declaró que tenía un tipo int que quería convertir en una cadena. Si es un tipo int, entonces, simple y llanamente, el valor es int. El compilador asegurará que ese sea el caso. Ni siquiera estoy seguro de cómo te fue en esa tangente. El OP no preguntó cómo asegurarse de que una referencia aleatoria fuera un número entero y luego convertirla en una cadena. Quizás en ese caso tengas un punto, pero ese no es el caso.
AaronM
1
Esta solución arroja una excepción para los nullvalores.
Mehdi Dehghani
18
Los comentarios sobre esta respuesta son ridículos.
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();
Xavier Poinas
fuente
66
también puedes hacer estostring count = "" + intCount;
Dion Dirza
2
¿Son todas estas soluciones igualmente eficientes? Me imagino que i.ToString () hace un boxeo innecesario de int, pero tal vez eso está optimizado de todos modos.
Stephen Holt el
43
.ToString()es la forma más eficiente de hacer la conversión. Todos los otros métodos presentados aquí eventualmente llamarán de .ToString()todos modos.
Xavier Poinas
66
Me siento un poco inquieto por el hecho de que sigas volviendo a declarar la variables
thecoshman
1
@XavierPoinas Si bien pueden llamar "ToString ()", de alguna manera depende de lo que planeas hacer con respecto a cuál es el más eficiente. string s = "xyz" + i;creará una nueva cadena "xyz": cree la nueva cadena que contiene su número entero; y luego crea una tercera cadena que contiene los 2 concatenados. string.Format("xyz{0}", i);por otro lado, es capaz de producir solo 2 cadenas, ya que las concatena en línea. Este rendimiento se vuelve más notable a medida que las cuerdas se alargan.
UKMonkey
32

En caso de que quieras la representación binaria y sigas borracho de la fiesta de anoche:

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();
}

Nota: Algo sobre no manejar muy bien el endianness ...

Editar: si no le importa sacrificar un poco de memoria por la velocidad, puede usar a continuación para generar una matriz con valores de cadena calculados previamente:

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("}");
}
Onots
fuente
25
int num = 10;
string str = Convert.ToString(num);
estrella polar
fuente
14

Se supone que el método ToString de cualquier objeto devuelve una representación de cadena de ese objeto.

int var1 = 2;

string var2 = var1.ToString();
Niño Voodoo
fuente
10

Más adelante con la respuesta de @ Xavier, aquí hay una página que acelera las comparaciones entre varias formas diferentes de hacer la conversión de 100 iteraciones a 21,474,836 iteraciones.

Parece más o menos un empate 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

fuente
9
string str = intVar.ToString();

En algunas condiciones, no tiene que usar ToString()

string str = "hi " + intVar;
Mehmet Ince
fuente
8

o:

string s = Convert.ToString(num);
Jesse C. Slicer
fuente
4

Ninguna de las respuestas mencionó que el ToString()método puede aplicarse a expresiones enteras

Debug.Assert((1000*1000).ToString()=="1000000");

incluso a literales enteros

Debug.Assert(256.ToString("X")=="100");

Aunque los literales enteros como este a menudo se consideran un mal estilo de codificación ( números mágicos ), puede haber casos en los que esta característica sea útil ...

Lobo
fuente
3
using System.ComponentModel;

TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
string s = (string)converter.ConvertTo(i, typeof(string));
nmclean
fuente
Esta respuesta apareció en la cola de revisión de baja calidad, presumiblemente porque no explicó el código. Si lo explica (en su respuesta), es mucho más probable que obtenga más votos a favor, ¡y el interlocutor realmente aprende algo!
The Guy with The Hat
55
@TheGuywithTheHat Notarás que ninguna de las respuestas aquí tiene una explicación del código, particularmente todos los ejemplos de código en esta respuesta altamente votada , porque es obvio lo que todos deben estar haciendo: convertir un int en una cadena. A decir verdad, no necesitamos nada más allá de la respuesta aceptada i.ToString: el resto solo está aquí en aras de la integridad y la diversión.
nmclean
2
La falta de una explicación en otras respuestas no significa que todas las respuestas deberían carecer de explicación. La única razón por la que comenté solo esta respuesta en particular es porque la vi en la cola de revisión de baja calidad.
The Guy with The Hat
@TheGuywithTheHat No estaba sugiriendo que mi respuesta puede estar incompleta porque otros lo están; Estoy diciendo que ninguno de ellos lo está (incluido este) porque la intención es obvia en el contexto de esta pregunta.
nmclean
2
@reggaeguitar Es principalmente una respuesta de broma, agregamos intencionalmente formas cada vez más oscuras de hacer una de las tareas más básicas. Pero para su pregunta, la ventaja de este método sería si no conociera los tipos de antemano, en lugar de typeof(int)y typeof(string)podría tener variables de Tipo y buscaría y usaría un convertidor apropiado siempre que exista.
nmclean
1
string s = "" + 2;

y puedes hacer cosas bonitas como:

string s = 2 + 2 + "you" 

El resultado será:

"4 tú"

Gilad F
fuente