Sobes.tech
Junior

Milyen típusátalakítási típusok léteznek C#-ban?

sobes.tech MI

Válasz az MI-től

C#-ban két fő típusú típuskonverzió létezik:

  1. Kifejezett konverzió (Explicit conversion): A (típus) operátor használatát igényli. Akkor használjuk, amikor a fordító nem tudja automatikusan biztonságosan végrehajtani a konverziót, például az alap osztályból származó osztályba vagy nagyobb pontosságú típusból kisebb pontosságúba (például double-ról int-re) történő konverzió esetén. Ez adatvesztéshez vagy futásidejű hibához (InvalidCastException) vezethet.

    // explicit konverzió double-ról int-re
    double d = 123.45;
    int i = (int)d; // i értéke 123 lesz
    
    // Objektum konvertálása egy adott típusra
    object obj = "Hello";
    string s = (string)obj; // s értéke "Hello" lesz
    
  2. Rejtett konverzió (Implicit conversion): Automatikusan végrehajtódik a fordító által, amikor a konverzió ismert és biztonságos, azaz adatvesztés nélkül. Például int-ről double-re.

    // implicit konverzió int-ről double-re
    int x = 10;
    double y = x; // y értéke 10.0 lesz
    
    // Származtatott osztály konvertálása az alap osztályra
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // implicit konverzió
    

Ezenkívül léteznek az as és is operátorok, amelyek szintén a típuskonverzióhoz tartoznak, de sajátosságokkal:

  • as operátor: Megkísérli a típuskonverziót, ha lehetséges, és null-t ad vissza, ha nem sikerül. Nem dob InvalidCastException kivételt. Csak referencia típusokkal és Nullable típusokkal használható.

    // `as` operátor használata
    object obj2 = "World";
    string s2 = obj2 as string; // s2 "World" lesz
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 null lesz
    
  • is operátor: Ellenőrzi, hogy egy objektum példánya-e egy adott típusnak vagy annak származékának. true vagy false értéket ad vissza. A legújabb C# verziókban pattern matching-ként is használható, ami lehetővé teszi a típusellenőrzést és a konvertálást egy lépésben.

    // `is` operátor használata típusellenőrzéshez
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Ha az objektum string
    }
    
    // `is` pattern matching-ként
    if (obj4 is string str)
    {
        // str itt elérhető stringként
    }