Sobes.tech
Junior

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:

  1. 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, double a int). 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"
    
  2. Conversione implicita (Implicit conversion): Eseguita automaticamente dal compilatore quando la conversione è nota e sicura, cioè senza perdita di dati. Ad esempio, da int a double.

    // 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 restituisce null se 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. Restituisce true o false. 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
    }