1. Perché serve la conversione dei tipi?
C# è un linguaggio fortemente tipizzato. Se il computer ha una “scatoletta” per un numero, provare a infilarci dentro del testo è come cercare di mettere una forchetta in una porta USB. Il compilatore non te la farà passare! 😡
Però, nella vita spesso lavoriamo contemporaneamente con diversi tipi di dati. Per esempio, hai una stringa che contiene un numero. Ed è proprio qui che serve la conversione (o trasformazione) dei tipi.
Vediamo un esempio. Supponiamo che tu voglia salvare il numero di utenti:
int a = 1;
int b = "2";
int c = "tre";
Il compilatore qui ti dirà subito: “Ma chi credi che io sia? Non so convertire automaticamente una stringa in un numero, senza il tuo aiuto non ce la faccio. Devi convertire la stringa in numero esplicitamente".
In C# ci sono diversi modi per convertire, ognuno con i suoi pro, contro e tipici trabocchetti.
2. Convertire int in string
Nel nostro lavoro spesso serve ottenere la rappresentazione testuale di un numero: ad esempio per mostrarlo a schermo, salvarlo su file, inviarlo in rete, unirlo a del testo ecc. In C# ci sono diversi modi per farlo, ognuno comodo in situazioni diverse.
Funzione ToString()
Questo è il metodo principale e più usato:
int number = 42;
string str = number.ToString(); // str == "42"
ToString() converte il numero in una stringa con il formato di default per quella struttura.
Interpolazione di stringa ($"...")
Un modo moderno, comodissimo per comporre stringhe con variabili:
int number = 42;
string str = $"Numero: {number}";
L’interpolazione di stringa richiama automaticamente ToString() per il valore inserito.
Puoi combinare più variabili e anche specificare il formato:
int number = 42;
string str = $"{number:D5}"; // "00042" — cinque cifre con zeri davanti
Concatenazione con stringa vuota
Un metodo vecchio, ma che funziona:
int number = 42;
string str = number + "";
Questo approccio è veloce per i casi semplici, ma meno chiaro per chi legge il codice.
3. Conversione implicita in stringa
Come già detto sopra, gli sviluppatori di C# hanno fatto in modo che tutte le variabili, oggetti, espressioni in C# possano essere convertite in string.
Anzi, questo succede automaticamente quando sommiamo una string con un altro tipo. Esempi:
int a = 5;
string name = "Anja" + a; // name contiene la stringa Anja5
int a = 5;
string city = a + "New York" + a; // city contiene la stringa 5New York5
int number = 10;
string code = "Yo";
string message = "Ciao! " + number + code; // message contiene la stringa Ciao! 10Yo
In tutti e tre gli esempi abbiamo sommato tranquillamente variabili di tipo int e string, e il risultato è sempre stato di tipo string.
Esempi:
int a = 5;
string name = "1" + a; // name contiene la stringa 15
int a = 5;
string city = a + "9" + a; // city contiene la stringa 595
int number = 10;
string code = "10";
string message = "" + number + code; // message contiene la stringa 1010
L’operazione di somma viene eseguita da sinistra a destra, quindi il risultato può essere un po’ inaspettato. Esempio:
int a = 5;
string name = a + a + "1" + a; // name contiene la stringa 1015
Ordine di esecuzione: ((a + a) + "1") + a
4. Conversione di una stringa in numero
Per convertire un numero in stringa in C#, basta sommarlo a una stringa vuota:
string str = "" + numero;
Ma cosa fare se devi convertire una stringa in numero? Beh, non puoi convertire qualsiasi stringa in numero. Ma se la stringa è fatta solo di cifre, allora sì. Per questo il tipo int ha una funzione speciale Parse().
Il comando è così:
int x = int.Parse("stringa")
Dove int x è la dichiarazione della variabile intera x, e stringa è il numero scritto come stringa (una stringa fatta di cifre).
Esempi:
string str = "123";
int number1 = int.Parse(str); // number1 contiene il numero 123;
int number2 = int.Parse("321"); // number2 contiene il numero 321
int number3 = int.Parse("321" + 0); // number3 contiene il numero 3210
int number4 = "321"; // Non si compila: la variabile è di tipo int, ma il valore è una stringa
Anche per i valori negativi funziona: la funzione int.Parse() è molto intelligente.
GO TO FULL VERSION