How to: Convertida com segurança usando como e for operadores (guia de programação C#)
Como os objetos são polimórficos, é possível que uma variável de um tipo de classe base para armazenar um tipo derivado. Para acessar o método do tipo derivado, é necessário converter o valor de volta para o tipo derivado. No entanto, a tentativa de um simples cast nesses casos cria o risco de gerar um InvalidCastException. Isto é porque C# fornece a é e como operadores. Você pode usar esses operadores para testar se um elenco será bem-sucedida sem causar uma exceção seja lançada. Em geral, o as operador é mais eficiente porque, na verdade, retorna o valor de conversão se a conversão pode ser feita com êxito. O is o operador retorna apenas um Boolean valor. Portanto, pode ser usado quando você apenas deseja determinar o tipo de objeto, mas não precisa realmente lançá-lo.
Exemplo
Os exemplos a seguir mostram como usar o is e as Digite de operadores de conversão de uma referência para outro, sem o risco de gerar uma exceção. O exemplo também mostra como usar o as operador com tipos de valor nulo.
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());
}
}
}
Consulte também
Referência
Tipos (guia de programação de C#)