Sobes.tech
Junior

Kokie yra tipų konvertavimo būdai C#-je?

sobes.tech AI

Atsakymas iš AI

C# yra du pagrindiniai tipų konvertavimo būdai:

  1. Aiškus konvertavimas (Explicit conversion): Reikalauja (tipas) operatoriaus naudojimo. Naudojamas, kai kompiliatorius negali saugiai automatiškai atlikti konversijos, pavyzdžiui, kai konvertuojama iš pagrindinio į išvestinį klasę arba iš didesnės tikslumo rūšies į mažesnę (pvz., double į int). Gali sukelti duomenų praradimą arba klaidą vykdymo metu (InvalidCastException).

    // Aiškus `double` į `int` konvertavimas
    double d = 123.45;
    int i = (int)d; // i bus 123
    
    // Objekto konvertavimas į konkretų tipą
    object obj = "Hello";
    string s = (string)obj; // s bus "Hello"
    
  2. Numanomas konvertavimas (Implicit conversion): Atliekamas automatiškai kompiliatoriaus, kai konversija yra žinoma ir saugi, t. y., nėra duomenų praradimo. Pavyzdžiui, konvertavimas iš int į double.

    // `int` į `double` numanomas konvertavimas
    int x = 10;
    double y = x; // y bus 10.0
    
    // Išvestinės klasės konvertavimas į pagrindinę
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Numanomas konvertavimas
    

Be to, yra operatoriai as ir is, kurie taip pat priklauso konvertavimui, bet su savo ypatybėmis:

  • Operatorius as: Atlieka konvertavimą, jei įmanoma, ir grąžina null, jei neįmanoma. Negauna išimties InvalidCastException. Naudojamas tik nuorodų tipams ir Nullable tipams.

    // `as` operatoriaus naudojimas
    object obj2 = "World";
    string s2 = obj2 as string; // s2 bus "World"
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 bus null
    
  • Operatorius is: Patikrina, ar objektas yra tam tikro tipo arba išvestinio iš jo. Grąžina true arba false. Naujausiose C# versijose gali būti naudojamas su pattern matching, leidžiant patikrinti ir konvertuoti vienu metu.

    // `is` operatoriaus naudojimas tipo patikrinimui
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Veiksmai, jei objektas yra eilutė
    }
    
    // `is` su pattern matching
    if (obj4 is string str)
    {
        // str yra prieinama kaip eilutė
    }