Archives Wild Code School
C#

3. C# - Convertir les types

Quête 23 sur 46

Tu dois prouver que tu sais convertir des types

Objectifs

  • Manipuler les chaînes de caractères entrées par l'utilisateur
  • Convertir les chaînes de caractères en d'autres types

Bravo, aspirant Padawan !

Tu viens de compléter deux missions très importantes. Elles t'ont donné un avant-goût du codage en plus de t'enseigner des bases très importantes concernant le fonctionnement du langage C#.

Maintenant, j'aimerais qu'on aille plus loin et que l'on commence à s'amuser un peu avec les types.

C'est parti !

Une situation bien embêtante

Imaginons que tu veuilles écrire un programme qui réalise l'action d'additionner deux entiers entre eux.

Ce que tu pourrais faire de manière intuitive serait ceci :

cs
Console.Write("Enter a first number: ");
int number1 = Console.ReadLine();
Console.Write("Enter a second number: ");
int number2 = Console.ReadLine();
int result = number1 + number2;
Console.WriteLine("number1 + number2 = " + result);

Si tu copies-colles ce morceau de code dans repl.it, tu constateras que ton code ne se lance pas. Il produit cette erreur: Error CS0029: Cannot implicitly convert type 'string' to 'int'.

Hein ?!

Décomposons le programme ci-dessus :

  1. Tu déclares une variable nombre1 de type int et tu lui affectes une chaîne de caractères rentrée par l'utilisateur.

  2. Tu déclares une variable nombre2 de type int et tu lui affectes une chaîne de caractères rentrée par l'utilisateur.

  3. Tu déclares une variable résultat de type int et tu l'instancies avec le résultat de l'addition de nombre1 et nombre2.

  4. Tu affiches le résultat

Et donc, c'est censé marcher, non ?

Eh bien, pas du tout. Si tu relis bien les étapes, il y a une incompatibilité qui saute aux yeux:

  • number1 de type int ... chaîne de caractères

  • number2 de type int ... chaîne de caractères

Est-ce que tu la vois ?

En fait, ton problème est très simple : tu déclares une variable de type nombre entier pour ensuite affecter une valeur de type chaîne de caractères. C# étant un langage statiquement typé, tu ne peux pas mettre dans une variable de type a une valeur de type b (à quelques exceptions près tout de même ;)). D'où le message: Can not convert ... int to string.

Bah alors, je ne peux pas faire mon addition ?! C'est n'importe quoi !

Convertir explicitement une variable

Ah, il existe un moyen de contourner le mécanisme, alors ?

Oui, et d'ailleurs heureusement, parce que l'on s'ennuierait bien sans pouvoir convertir des valeurs d'un type dans l'autre. C# pourvoit un espace de noms réservé à la conversion d'un type dans un autre. Il s'agit de l'espace de noms Convert.

Un espace de noms est simplement un espace où il y a des noms. Il a pour but de ranger les responsabilités et de ne pas se mettre dans la foultitude de fonctions que le framework .NET met à notre disposition.

La fonction qui nous intéresse particulièrement est ToInt32. Il s'agit d'une fonction qui transforme n'importe quoi (ou presque) en entier. Eh bien on aurait dû utiliser cette méthode pour éviter l'erreur de typage de l'étape au-dessus.

Bien, assez parlé ! Je te montre maintenant le code corrigé avec ToInt32:

cs
Console.Write(“Type a number: ");
string number1AsString = Console.ReadLine();
Console.Write("Type a second number: ");
string number2AsString = Console.ReadLine();
int number1 = Convert.ToInt32(number1AsString);
int number2 = Convert.ToInt32(number2AsString);
int result = number1 + number2;
Console.WriteLine("number1 + number2 = " + result); 

Ressources

↗
Les espaces de noms en C#
docs.microsoft.com

Challenge

La calculette

Ta mission est la suivante:

  1. Récupère dans une variable une entrée utilisateur en indiquant que tu demandes un nombre;
  2. Récupère dans une autre variable une entrée utilisateur en indiquant que tu demandes un nombre ;
  3. Demande à l’utilisateur une chaîne de caractères qui fera office de message de succès ;
  4. Additionne les deux nombres récupérés ;
  5. Affiche l’opération à l’écran ([valeur variable 1] + [valeur variable 2] = [résultat addition]). Remplace ce qu’il y a entre les crochets par les valeurs concernées ;
  6. Affiche le message de succès entré précédemment par l’utilisateur.

Critères de validation

  • Le lien est bien hébergé sur repl.it
  • Le code exécuté affiche bien le résultat attendu
  • Les valeurs des variables doivent être affichées et pas leur noms