Quels sont les types de conversions de types en C#?
sobes.tech IA
Réponse de l'IA
En C# il existe deux principaux types de conversion de types : explicite et implicite.
Conversion implicite
Se produit automatiquement lorsque le compilateur est sûr que la conversion est sûre et ne provoquera pas de perte de données. Par exemple, d'un type avec une plage de valeurs plus petite à un type avec une plage plus grande.
// Conversion implicite de int à long
int i = 100;
long l = i;
Conversion explicite
Require d'indiquer dans le code l'opérateur de conversion ((type)) et est utilisé lorsque la conversion peut entraîner une perte de données ou lancer une exception. Elle est nécessaire lors de la conversion d'un type avec une plage plus grande à un type avec une plage plus petite ou entre types non liés.
// Conversion explicite de double à int
double d = 123.45;
int i = (int)d; // La partie décimale est ignorée
// Conversion explicite d'object à string
object obj = "Hello";
string s = (string)obj;
// Conversion en utilisant les opérateurs as et is
object objAs = "World";
string sAs = objAs as string; // Retourne null si la conversion n'est pas possible
if (objAs is string) // Vérifie si l'objet est de type string
{
string sIs = (string)objAs;
}
Comparaison de la conversion explicite, as et is
| Opération | Description | Erreur en cas d'échec |
|---|---|---|
(Type) expression |
Conversion explicite. Nécessite une correspondance exacte du type. | InvalidCastException |
expression as Type |
Tente de convertir le type. Fonctionne uniquement pour les types de référence et les types permettant null. | Retourne null |
expression is Type |
Vérifie si l'expression peut être convertie au type spécifié. | Valeur booléenne (true/false) |
Conversions personnalisées
Le développeur peut définir ses propres opérateurs de conversion explicite et implicite pour des types personnalisés, en utilisant les mots-clés implicit et explicit.
// Exemple de conversion implicite personnalisée
public class Inches
{
public int Value { get; set; }
public static implicit operator Millimeters(Inches i)
{
return new Millimeters { Value = i.Value * 25 };
}
}
public class Millimeters
{
public int Value { get; set; }
}
// Utilisation
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Conversion implicite
// Exemple de conversion explicite personnalisée
public class Kilograms
{
public int Value { get; set; }
}
public class Pounds
{
public int Value { get; set; }
public static explicit operator Kilograms(Pounds p)
{
return new Kilograms { Value = (int)(p.Value / 2.20462) };
}
}
// Utilisation
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Conversion explicite