HOWTO · Csharp

Convertire valori in int in C#: cast, int.Parse() e Convert.ToInt32()

In C#, scegli il metodo in base all’input: usa il cast (int) per un valore numerico, int.Parse() per il testo che rappresenta un intero e Convert.ToInt32() per i valori supportati. Scopri come gestiscono frazioni, valori nulli e input non convertibili.

In questa pagina

In C#, scegli il metodo di conversione in base all’input: usa il cast (int) per un valore numerico, int.Parse() per il testo che rappresenta un intero e Convert.ToInt32() per i valori supportati da convertire. Questi metodi gestiscono in modo diverso le frazioni, i valori nulli e gli input che non possono convertire.

Convertire un valore numerico in int con il cast (int)

Il cast numerico è la scelta diretta quando un valore ha già un tipo numerico. L’espressione di cast converte il valore senza analizzare il testo. Per i valori in virgola mobile e decimali, la conversione in int tronca la parte frazionaria verso zero: 42.9 diventa 42, mentre -42.9 diventa -42. Questo esempio converte un valore numerico e stampa il risultato.

using System;

class Program
{
    static void Main()
    {
        double value = 42.9;
        int result = (int)value;
        Console.WriteLine(result);
    }
}
42

Il cast si applica ai tipi numerici compatibili; non analizza una stringa come "42". Se un valore in virgola mobile è fuori dall’intervallo di int, una conversione non verificata produce un risultato non specificato. In un contesto verificato, una conversione fuori intervallo genera OverflowException. Usa checked((int)value) se vuoi che l’overflow venga segnalato, oppure verifica l’intervallo prima della conversione. Consulta la guida Microsoft sul casting e sulle conversioni di tipo.

Analizzare una stringa con un numero intero usando int.Parse()

Usa int.Parse() quando l’input è una stringa che contiene un intero, per esempio il testo letto da un modulo o da un file di configurazione. Il metodo restituisce un int se il testo rispetta il formato intero accettato. L’esempio analizza una stringa e stampa il numero ottenuto.

using System;

class Program
{
    static void Main()
    {
        string text = "42";
        int result = int.Parse(text);
        Console.WriteLine(result);
    }
}
42

int.Parse() non converte testo arbitrario né un oggetto numerico: analizza una stringa. Una stringa null genera ArgumentNullException, un testo che non rappresenta un intero valido genera FormatException e un valore fuori dall’intervallo di int genera OverflowException. Se l’input dell’utente potrebbe non essere valido, usa int.TryParse() e gestisci il risultato booleano, così un errore di parsing non interrompe l’operazione. Le regole di parsing predefinite usano le impostazioni cultura correnti; specifica una cultura esplicita se il testo proviene da una fonte con un formato numerico noto.

Convertire i valori supportati in int con Convert.ToInt32()

Convert.ToInt32() è utile quando l’input può essere un valore primitivo supportato, per esempio un intero, un booleano, un numero in virgola mobile, un decimale o una stringa. Non converte ogni tipo possibile: i tipi di overload disponibili e le implementazioni di IConvertible determinano quali valori sono convertibili. Con una stringa, analizza il testo che rappresenta un intero. Con un input in virgola mobile o decimale, arrotonda all’intero più vicino usando la regola del pari: a metà arrotonda verso il numero pari. Questo differisce dal troncamento eseguito da (int).

using System;

class Program
{
    static void Main()
    {
        double value = 42.5;
        int result = Convert.ToInt32(value);
        Console.WriteLine(result);
    }
}
42

Per questo valore a metà, l’arrotondamento verso il pari produce 42; il valore 43.5 produce 44. Convert.ToInt32() restituisce 0 per un riferimento null, mentre le conversioni non supportate, le stringhe non valide e i valori fuori dall’intervallo di int possono generare eccezioni. Sceglilo quando le sue regole di conversione sono adatte all’input; usa int.Parse() quando l’input è specificamente testo che rappresenta un intero e il cast quando vuoi troncare un valore numerico.