Meu problema com isso é que você perde a segurança do tipo. myInt poderia ser qualquer coisa. Nada aqui diz pegar um número inteiro e convertê-lo em uma string. myInt pode ser um objeto e um objeto não pode ser convertido em uma string. Isso é conhecido no momento da compilação, mas nem gera uma exceção de tempo de execução, apenas permite dados ruins.
Timothy Gonzalez
3
@ TimothyGonzalez Esse é um caso extremo, se você chamar .ToString (), geralmente porque você precisa que ele seja uma string e pode ser uma string.
EpicKip
35
@nfgallimore Não é um caso de margem válido, nem mesmo é um caso de margem nesta situação. O OP declarou que ele tinha um tipo int que ele queria converter em uma string. Se for um tipo int, então puro e simples, o valor é um int. O compilador garantirá que é esse o caso. Nem tenho certeza de como você saiu nessa tangente. O OP não perguntou como garantir que uma referência aleatória fosse um número inteiro e depois a convertesse em uma string. Talvez nesse caso você tenha razão, mas esse não é o caso.
AaronM
1
Esta solução lança exceção para nullvalores.
Mehdi Dehghani
18
Os comentários sobre esta resposta são 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 =newStringBuilder().Append(i).ToString();
Também você pode fazer issostring count = "" + intCount;
Dion Dirza
2
Todas essas soluções são igualmente eficientes? Eu imagino que o i.ToString () faz alguns boxe desnecessários do int, mas talvez isso seja otimizado de qualquer maneira.
Stephen Holt
43
.ToString()é a maneira mais eficiente de fazer a conversão. Todos os outros métodos apresentados aqui serão chamados de .ToString()qualquer maneira.
Xavier Poinas
6
Eu me sinto um pouco perturbado pelo fato de você manter a re-declarar a variávels
thecoshman
1
@XavierPoinas Embora eles possam chamar "ToString ()" - depende um pouco do que você planeja fazer com relação a qual é o mais eficiente. string s = "xyz" + i;criará uma nova string "xyz" - crie a nova string contendo seu número inteiro; e, em seguida, crie uma terceira string que contenha os 2 concated. string.Format("xyz{0}", i);por outro lado, é capaz de produzir apenas 2 strings - pois as concatena inline. Esse desempenho se torna mais visível à medida que as seqüências ficam mais longas.
UKMonkey
32
Apenas no caso de você querer a representação binária e ainda estar bêbado da festa da noite passada:
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();}
Nota: Algo sobre não lidar com endianness muito bem ...
Edit: Se você não se importa em sacrificar um pouco de memória por velocidade, pode usar abaixo para gerar uma matriz com valores de string pré-calculados:
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("}");}
Nenhuma das respostas mencionou que o ToString()método pode ser aplicado a expressões inteiras
Debug.Assert((1000*1000).ToString()=="1000000");
mesmo para literais inteiros
Debug.Assert(256.ToString("X")=="100");
Embora literais inteiros como esse sejam frequentemente considerados como estilo de codificação ruim ( números mágicos ), pode haver casos em que esse recurso é útil ...
Essa resposta apareceu na fila de revisão de baixa qualidade, provavelmente porque você não explicou o código. Se você o explicar (em sua resposta), é muito mais provável que você receba mais votos - e o questionador realmente aprenderá alguma coisa!
O cara com o chapéu
5
@TheGuywithTheHat Você notará que nenhuma das respostas aqui tem qualquer explicação do código, particularmente todos os exemplos de código nesta resposta altamente votada , porque é óbvio o que todos devem estar fazendo: converter um int em uma string. Na verdade, não precisamos de nada além da resposta aceita - i.ToString- o restante está aqui apenas por uma questão de perfeição e diversão.
nmclean
2
A falta de explicação em outras respostas não significa que todas as respostas devam não ter explicação. O único motivo pelo qual comentei essa resposta em particular é porque a vi na fila de revisão de baixa qualidade.
O cara com o chapéu
@TheGuywithTheHat Eu não estava sugerindo que minha resposta pode estar incompleta porque outras são; Estou dizendo que nenhum deles é (incluindo este) porque a intenção é óbvia no contexto desta questão.
nmclean
2
@reggaeguitar É principalmente uma resposta de brincadeira, nós propositadamente adicionamos maneiras cada vez mais obscuras de realizar uma das tarefas mais básicas. Mas, para sua pergunta, a vantagem desse método seria se você não conhecesse os tipos antecipadamente - em vez de typeof(int)e typeof(string)pudesse ter variáveis Type, e ele encontraria e usaria um conversor apropriado sempre que existir.
null
valores.fonte
string count = "" + intCount;
.ToString()
é a maneira mais eficiente de fazer a conversão. Todos os outros métodos apresentados aqui serão chamados de.ToString()
qualquer maneira.s
string s = "xyz" + i;
criará uma nova string "xyz" - crie a nova string contendo seu número inteiro; e, em seguida, crie uma terceira string que contenha os 2 concated.string.Format("xyz{0}", i);
por outro lado, é capaz de produzir apenas 2 strings - pois as concatena inline. Esse desempenho se torna mais visível à medida que as seqüências ficam mais longas.Apenas no caso de você querer a representação binária e ainda estar bêbado da festa da noite passada:
Nota: Algo sobre não lidar com endianness muito bem ...
Edit: Se você não se importa em sacrificar um pouco de memória por velocidade, pode usar abaixo para gerar uma matriz com valores de string pré-calculados:
fonte
fonte
O método ToString de qualquer objeto deve retornar uma representação de string desse objeto.
fonte
Mais adiante na resposta de @ Xavier, aqui está uma página que acelera as comparações entre várias maneiras diferentes de fazer a conversão de 100 iterações para 21.474.836 iterações.
Parece praticamente uma ligação entre:
fonte
Em algumas condições, você não precisa usar
ToString()
fonte
ou:
fonte
Nenhuma das respostas mencionou que o
ToString()
método pode ser aplicado a expressões inteirasmesmo para literais inteiros
Embora literais inteiros como esse sejam frequentemente considerados como estilo de codificação ruim ( números mágicos ), pode haver casos em que esse recurso é útil ...
fonte
fonte
i.ToString
- o restante está aqui apenas por uma questão de perfeição e diversão.typeof(int)
etypeof(string)
pudesse ter variáveis Type, e ele encontraria e usaria um conversor apropriado sempre que existir.e você pode fazer coisas legais como:
O resultado será:
fonte