Maîtriser la conversion de types en C# : Implicite, Explicite, Parse et méthodes Convert
Maîtriser la conversion de types en C#
Apprenez à convertir entre types de données en C# — des conversions implicites et explicites aux puissantes API Parse et Convert — avec des exemples clairs et des conseils de bonnes pratiques.
La conversion de types — changer une valeur d'un type de données à un autre — est une compétence fondamentale en C#. Comprendre quand et comment utiliser chaque méthode de conversion garantit que votre code est à la fois sûr et efficace.
En C#, les conversions se divisent en deux grandes catégories :
- Conversions de types implicites
- Conversions de types explicites (cast)
1. Conversion de type implicite en C#
Les conversions implicites sont effectuées automatiquement par le compilateur lorsqu'aucune perte de données ne peut survenir. Elles sont sûres et ne nécessitent aucune syntaxe supplémentaire.
Les scénarios typiques impliquent la conversion d'un type numérique plus petit vers un plus grand — par exemple, int vers double — afin que la valeur puisse être représentée sans troncature.
Exemple : Conversion de type implicite
using System;
namespace MonApplication {
class Programme {
static void Main(string[] args) {
int numInt = 500;
// Conversion implicite
double numDouble = numInt;
Console.WriteLine($"Valeur numInt : {numInt}");
Console.WriteLine($"Type numInt : {numInt.GetType()}");
Console.WriteLine($"Valeur numDouble : {numDouble}");
Console.WriteLine($"Type numDouble : {numDouble.GetType()}");
Console.ReadLine();
}
}
}
Sortie
Valeur numInt : 500 Type numInt : System.Int32 Valeur numDouble : 500 Type numDouble : System.Double
Puisque double a une plus grande capacité, le compilateur promeut la valeur int en toute sécurité sans risque de débordement.
Note : Les conversions implicites ne perdent jamais de données, mais elles augmentent la taille du type résultant.
2. Conversion de type explicite (Cast) en C#
Les conversions explicites, ou casts, sont utilisées lors de la conversion d'un type plus grand vers un plus petit ou entre types non liés. Le développeur doit signaler son intention, et le compilateur peut émettre des avertissements si la conversion pourrait perdre des données.
Exemple : Conversion de type explicite
using System;
namespace MonApplication {
class Programme {
static void Main(string[] args) {
double numDouble = 1.23;
int numInt = (int)numDouble; // Cast explicite
Console.WriteLine($"Valeur double originale : {numDouble}");
Console.WriteLine($"Valeur int convertie : {numInt}");
Console.ReadLine();
}
}
}
Sortie
Valeur double originale : 1.23 Valeur int convertie : 1
Le cast tronque la partie fractionnaire, donc 1.23 devient 1. Si la précision importe, envisagez d'utiliser des méthodes d'arrondi avant le cast.
Note : Le cast est aussi appelé conversion de type.
3. Conversion de chaînes avec Parse()
Lors de la conversion d'un string vers un type numérique, int.Parse, double.Parse, etc., offrent une approche directe et type-safe.
Exemple : Utilisation de int.Parse
using System;
namespace Conversion {
class Programme {
static void Main(string[] args) {
string n = "100";
int a = int.Parse(n);
Console.WriteLine($"Valeur string originale : {n}");
Console.WriteLine($"Valeur int convertie : {a}");
Console.ReadLine();
}
}
}
Sortie
Valeur string originale : 100 Valeur int convertie : 100
Tenter d'analyser une chaîne non numérique, comme "test", lèvera une FormatException. En code de production, enveloppez l'appel dans un try-catch ou utilisez int.TryParse pour gérer les erreurs gracieusement.
4. La classe Convert
La classe statique Convert offre une large suite de méthodes pour convertir entre de nombreux types de données, effectuant souvent les vérifications nécessaires en interne.
| Méthode | Description |
|---|---|
ToBoolean() | Convertit une valeur en bool |
ToChar() | Convertit une valeur en char |
ToDouble() | Convertit une valeur en double |
ToInt16() | Convertit une valeur en int 16 bits |
ToString() | Convertit une valeur en string |
Voici des exemples illustratifs couvrant les conversions courantes.
Exemple : int → string et double
using System;
namespace Conversion {
class Programme {
static void Main(string[] args) {
int num = 100;
Console.WriteLine($"Valeur int : {num}");
string str = Convert.ToString(num);
Console.WriteLine($"Valeur string : {str}");
double dbl = Convert.ToDouble(num);
Console.WriteLine($"Valeur Double : {dbl}");
Console.ReadLine();
}
}
}
Sortie
Valeur int : 100 Valeur string : 100 Valeur Double : 100
Exemple : string ↔ double
using System;
namespace Conversion {
class Programme {
static void Main(string[] args) {
string str = "99.99";
Console.WriteLine($"Valeur string originale : {str}");
double dbl = Convert.ToDouble(str);
Console.WriteLine($"Valeur Double convertie : {dbl}");
double num = 88.9;
Console.WriteLine($"Valeur double originale : {num}");
string newStr = Convert.ToString(num);
Console.WriteLine($"Valeur string convertie : {newStr}");
Console.ReadLine();
}
}
}
Sortie
Valeur string originale : 99.99 Valeur Double convertie : 99.99 Valeur double originale : 88.9 Valeur string convertie : 88.9
Exemple : int → bool
using System;
namespace Conversion {
class Programme {
static void Main(string[] args) {
int num1 = 0;
int num2 = 1;
bool bool1 = Convert.ToBoolean(num1);
bool bool2 = Convert.ToBoolean(num2);
Console.WriteLine($"Valeur booléenne de 0 est : {bool1}");
Console.WriteLine($"Valeur booléenne de 1 est : {bool2}");
Console.ReadLine();
}
}
}
Sortie
Valeur booléenne de 0 est : False Valeur booléenne de 1 est : True
Note : En C#, 0 est interprété comme false ; tout entier non-zéro évalue à true.
En maîtrisant ces techniques de conversion, vous pouvez écrire du code à la fois type-safe et expressif, réduisant les erreurs d'exécution et améliorant la lisibilité.
Langue C
- Maîtriser la conversion et le transtypage de types en Python : Guide complet
- Maîtriser les nombres, la conversion de types et les mathématiques en Python
- Maîtriser le transtypage Java : De l'élargissement au rétrécissement et au-delà
- Maîtriser les Génériques Java : Simplifier le tri et renforcer la sécurité de type
- ASTM A1018 Grade CS Type B : Spécifications de l'acier faible en carbone
- ASTM A424 Grade Type II : Spécifications et performances de l'acier
- ASTM A424 Grade Type I : Propriétés clés et performances
- ASTM A792 Grade CS Type A – Propriétés et Spécifications Détaillées
- ASTM A53 Grade A Type E – Spécifications et propriétés clés