Converti int in stringa?


Risposte:


741
string myString = myInt.ToString();

4
Il mio problema è che si perde la sicurezza del tipo. myInt potrebbe essere qualsiasi cosa. Nulla qui dice prendere un numero intero e convertirlo in una stringa. myInt potrebbe essere un oggetto e un oggetto non può essere convertito in una stringa. Questo è noto al momento della compilazione, ma non solleva nemmeno un'eccezione di runtime, ma consentirebbe solo dati errati.
Timothy Gonzalez,

3
@TimothyGonzalez Questo è un caso limite, se chiami .ToString () di solito perché è necessario che sia una stringa e può essere una stringa.
EpicKip,

35
@nfgallimore Non è un caso limite valido, non è nemmeno un caso limite in questa situazione. L'OP ha dichiarato di avere un tipo int che voleva convertire in una stringa. Se è un tipo int, quindi chiaro e semplice il valore è un int. Il compilatore assicurerà che è il caso. Non sono nemmeno sicuro di come sei andato su quella tangente. L'OP non ha chiesto come assicurarsi che un riferimento casuale fosse un numero intero e quindi convertirlo in una stringa. Forse in quel caso hai ragione, ma non è così.
AaronM,

1
Questa soluzione genera eccezioni per i nullvalori.
Mehdi Dehghani,

18
I commenti su questa risposta sono ridicoli.

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
anche tu puoi farlostring count = "" + intCount;
Dion Dirza il

2
Tutte queste soluzioni sono ugualmente efficienti? Immagino che i.ToString () faccia un po 'di boxe non necessario dell'int, ma forse è comunque ottimizzato.
Stephen Holt,

43
.ToString()è il modo più efficiente per eseguire la conversione. Tutti gli altri metodi qui presentati alla fine chiameranno .ToString()comunque.
Xavier Poinas,

6
Mi sento leggermente turbato dal fatto che continui a dichiarare nuovamente la variabiles
thecoshman,

1
@XavierPoinas Anche se possono chiamare "ToString ()" - in qualche modo dipende da cosa si prevede di farne su quale sia il più efficiente. string s = "xyz" + i;creerà una nuova stringa "xyz" - crea la nuova stringa contenente il tuo numero intero; e quindi creare una terza stringa che contiene i 2 concessi. string.Format("xyz{0}", i);d'altra parte, è in grado di produrre solo 2 stringhe, poiché le sta concatenando in linea. Questa prestazione diventa più evidente man mano che le stringhe si allungano.
UKMonkey

32

Nel caso in cui desideri la rappresentazione binaria e sei ancora ubriaco dalla festa delle ultime notti:

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: qualcosa sul non gestire l'endianità molto bene ...

Modifica: se non ti dispiace sacrificare un po 'di memoria per la velocità, puoi utilizzare di seguito per generare un array con valori di stringa precalcolati:

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

25
int num = 10;
string str = Convert.ToString(num);

14

Il metodo ToString di qualsiasi oggetto dovrebbe restituire una rappresentazione in formato stringa di quell'oggetto.

int var1 = 2;

string var2 = var1.ToString();

10

Più avanti alla risposta di @ Xavier, ecco una pagina che velocizza i confronti tra diversi modi di fare la conversione da 100 iterazioni a 21.474.836 iterazioni.

Sembra praticamente un pareggio tra:

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

In alcune condizioni, non è necessario utilizzare ToString()

string str = "hi " + intVar;


4

Nessuna delle risposte ha indicato che il ToString()metodo può essere applicato a espressioni intere

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

anche a numeri interi

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

Sebbene letterali interi come questo siano spesso considerati cattivi stili di codifica ( numeri magici ), ci possono essere casi in cui questa funzione è utile ...


3
using System.ComponentModel;

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

Questa risposta è arrivata nella coda di recensioni di bassa qualità, presumibilmente perché non hai spiegato il codice. Se lo spieghi (nella tua risposta), hai molte più probabilità di ottenere più voti - e l'interrogante impara davvero qualcosa!
The Guy with The Hat

5
@TheGuywithTheHat Noterai che nessuna delle risposte qui ha alcuna spiegazione del codice, in particolare tutti gli esempi di codice in questa risposta altamente votata , perché è ovvio cosa devono fare tutti: convertire un int in una stringa. Sinceramente non abbiamo bisogno di nulla oltre la risposta accettata i.ToString- il resto è qui solo per motivi di completezza e divertimento.
nmclean,

2
La mancanza di una spiegazione in altre risposte non significa che tutte le risposte dovrebbero mancare di spiegazione. L'unica ragione per cui ho commentato solo questa risposta particolare è perché l'ho vista nella coda di recensioni di bassa qualità.
The Guy with The Hat,

@TheGuywithTheHat Non stavo suggerendo che la mia risposta potesse essere incompleta perché altri lo sono; Sto dicendo che nessuno di loro lo è (incluso questo) perché l'intenzione è ovvia nel contesto di questa domanda.
nmclean,

2
@reggaeguitar È principalmente una risposta scherzosa, volutamente aggiungevamo modi sempre più oscuri per svolgere uno dei compiti più elementari. Ma alla tua domanda, il vantaggio di questo metodo sarebbe se non conoscessi i tipi in anticipo - invece di typeof(int)e typeof(string)potresti avere variabili Type e troverebbe e userebbe un convertitore appropriato ogni volta che esiste.
nmclean,

1
string s = "" + 2;

e puoi fare cose carine come:

string s = 2 + 2 + "you" 

Il risultato sarà:

"4 you"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.