Quali sono i tipi di conversione di tipo in C#?
sobes.tech AI
Risposta dell'AI
In C# ci sono due principali tipi di conversione di tipo:
-
Conversione esplicita (Explicit conversion): Richiede l'uso dell'operatore di conversione
(tipo). Viene usata quando il compilatore non può eseguire in modo sicuro la conversione automaticamente, ad esempio, dalla classe base a quella derivata o da un tipo con maggiore precisione a uno con minore (ad esempio,doubleaint). Può portare a perdita di dati o errori in fase di esecuzione (InvalidCastException).// Conversione esplicita da double a int double d = 123.45; int i = (int)d; // i sarà uguale a 123 // Conversione di un oggetto a un tipo specifico object obj = "Hello"; string s = (string)obj; // s sarà "Hello" -
Conversione implicita (Implicit conversion): Eseguita automaticamente dal compilatore quando la conversione è nota e sicura, cioè senza perdita di dati. Ad esempio, da
intadouble.// Conversione implicita da int a double int x = 10; double y = x; // y sarà 10.0 // Conversione implicita da classe derivata a base class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Conversione implicita
Inoltre, esistono gli operatori as e is, che sono anch'essi relativi alla conversione di tipi, ma con caratteristiche specifiche:
-
Operatore
as: Esegue la conversione di tipo se possibile e restituiscenullse non riesce. Non genera eccezioni InvalidCastException. È usato solo con tipi di riferimento e tipi Nullable.// Uso dell'operatore as object obj2 = "World"; string s2 = obj2 as string; // s2 sarà "World" object obj3 = 123; string s3 = obj3 as string; // s3 sarà null -
Operatore
is: Verifica se un oggetto è un'istanza di un tipo specifico o di un tipo derivato. Restituiscetrueofalse. Nelle ultime versioni di C# può essere usato con pattern matching per verificare e contemporaneamente fare il cast.// Uso dell'operatore is per verificare il tipo object obj4 = "Example"; if (obj4 is string) { // Azioni se l'oggetto è una stringa } // Uso di is con pattern matching if (obj4 is string str) { // str è disponibile qui come stringa }