Convertir les types de données

Terminée

Tip

Pour plus d’informations, consultez l’onglet Texte et images !

Étant donné que C# est fortement typé, vous devez parfois convertir explicitement une valeur d’un type de données en un autre. Cela est particulièrement important lors de l’utilisation de l’entrée utilisateur, car Console.ReadLine() retourne toujours du texte (a string), même lorsque l’utilisateur tape un nombre.

Pourquoi la conversion importe

Tenez compte de ce scénario courant :

Console.Write("Enter your age: ");
string ageInput = Console.ReadLine();
int nextYear = ageInput + 1;    // ERROR! Can't add int to string

Pour effectuer des calculs mathématiques avec l’entrée utilisateur, vous devez d’abord convertir la chaîne en nombre.

Méthodes de conversion

C# fournit des Convert méthodes pour modifier les valeurs entre les types de données :

Method Convertit en Example Résultat
Convert.ToInt32() int Convert.ToInt32("42") 42
Convert.ToDecimal() decimal Convert.ToDecimal("19.99") 19.99m
Convert.ToDouble() double Convert.ToDouble("3.14") 3.14
Convert.ToString() corde Convert.ToString(42) "42"

Voici comment résoudre le scénario précédent :

Console.Write("Enter your age: ");
string ageInput = Console.ReadLine();
int age = Convert.ToInt32(ageInput);
int nextYear = age + 1;
Console.WriteLine($"Next year you'll be {nextYear}");

Vous pouvez essayer d’exécuter ce code vous-même dans l’éditeur de code C#.

Méthodes d’analyse

Une autre façon de convertir des chaînes en nombres consiste à utiliser les Parse méthodes suivantes :

int age = int.Parse("25");
decimal price = decimal.Parse("19.99");
double average = double.Parse("87.5");

Les deux Convert.ToInt32() et int.Parse() effectuent des opérations similaires : utilisez le style que vous préférez.

Conversion entre types numériques

Pour convertir entre les types numériques (comme decimal pour int), utilisez un cast en plaçant le type cible entre parenthèses :

decimal price = 19.99m;
int wholePrice = (int)price;         // Casts to int: 19 (decimal dropped)
Console.WriteLine(wholePrice);       // Output: 19

Vous pouvez également effectuer un cast pour conserver la précision décimale pendant la division :

int first = 7;
int second = 2;
decimal result = (decimal)first / (decimal)second;
Console.WriteLine(result);           // Output: 3.5

Que se passe-t-il avec les conversions non valides ?

Si vous essayez de convertir une valeur qui ne peut pas être interprétée comme un nombre, C# génère une erreur :

int number = Convert.ToInt32("hello");    // ERROR: Input string was not in a correct format

Pour l’instant, vérifiez simplement que la valeur peut être convertie avant d’essayer. Plus tard, vous apprendrez à gérer correctement les erreurs.