Sdílet prostřednictvím


Postupy: Bezpečné přetypování pomocí operátorů as a is (Průvodce programováním v C#)

Protože polymorfní objekty, je možné pro proměnné typu základní třídy držet odvozeného typu.Přístup odvozeného typu metody je nezbytné přetypovat hodnotu odvozeného typu.Však pokus jednoduchý osazení v těchto případech vytvoří riziko vyvolání InvalidCastException.Je proč C# obsahuje je a jako operátory.Tyto operátory můžete použít k ověření, zda cast budou úspěšné, aniž by být vyvolána výjimka.Obecně as operátor je efektivnější, protože skutečně vrátí hodnotu cast Pokud tavby lze úspěšně provést.is Operátor vrací booleovskou hodnotu.Je proto lze pouze chcete určit typ objektu, ale nemají ji skutečně nádech.

Příklad

Následující příklady ukazují, jak používat is a as operátory nádech z jednoho odkazu zadejte do druhého bez rizika došlo k výjimce.Příklad také ukazuje, jak použít as operátor s typy hodnot s možnou hodnotou Null.

class SafeCasting
{
    class Animal
    {
        public void Eat() { Console.WriteLine("Eating."); }
        public override string ToString()
        {
            return "I am an animal.";
        }
    }
    class Mammal : Animal { }
    class Giraffe : Mammal { }

    class SuperNova { }

    static void Main()
    {
        SafeCasting app = new SafeCasting();

        // Use the is operator to verify the type. 
        // before performing a cast.
        Giraffe g = new Giraffe();
        app.UseIsOperator(g);

        // Use the as operator and test for null 
        // before referencing the variable.
        app.UseAsOperator(g);

        // Use the as operator to test 
        // an incompatible type.
        SuperNova sn = new SuperNova();
        app.UseAsOperator(sn);

        // Use the as operator with a value type. 
        // Note the implicit conversion to int? in  
        // the method body. 
        int i = 5;
        app.UseAsWithNullable(i);


        double d = 9.78654;
        app.UseAsWithNullable(d);

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }

    void UseIsOperator(Animal a)
    {
        if (a is Mammal)
        {
            Mammal m = (Mammal)a;
            m.Eat();
        }
    }

    void UseAsOperator(object o)
    {
        Mammal m = o as Mammal;
        if (m != null)
        {
            Console.WriteLine(m.ToString());
        }
        else
        {
            Console.WriteLine("{0} is not a Mammal", o.GetType().Name);
        }
    }

    void UseAsWithNullable(System.ValueType val)
    {
        int? j = val as int?;
        if (j != null)
        {
            Console.WriteLine(j);
        }
        else
        {
            Console.WriteLine("Could not convert " + val.ToString());
        }
    }
}

Viz také

Referenční dokumentace

Typy (Průvodce programováním v C#)

Přetypování a převody typů (Průvodce programováním v C#)

Typy s povolenou hodnotou Null (Průvodce programováním v C#)