Usando como e é para conversão segura em C #

Fazer uma conversão em C # é dizer ao compilador para fazer uma conversão explícita para converter o tipo de um objeto de um para outro e, por explícito, significa que você está ciente de que os dados podem ser truncados durante a operação. Por exemplo: converter a decimalem a float.

Vamos dar uma olhada neste exemplo

private void button1_Click(object sender, EventArgs e)
{
Button button = (Button)sender; // doing an explicit cast here
button
.Text = "Processing...";
}

O problema com o código acima é se o manipulador de eventos não é mais chamado pelo Buttontipo, ele lança um InvalidCastException.

C # oferece duas soluções

Usando as

private void button1_Click(object sender, EventArgs e)
{
Button button = sender as Button;

if (button != null)
{
button
.Text = "Processing...";
}
else
{
//Do what you need to do here
}
}

Usando is

private void button1_Click(object sender, EventArgs e)
{
if (sender is Button)
{
Button button = (Button)sender;
button
.Text = "Processing...";
}
else
{
//Do what you need to do here
}
}

e voila, não mais InvalidCastException.

Agora, o que você deve usar é a próxima coisa que você deve considerar, asou isou simplesmente falhar rapidamente e pegar o InvalidCastException. A resposta é que depende de você e de seu aplicativo. Dê uma olhada nesta resposta StackOverflow para mais discussões sobre o que usar.

Referências
  • Codificação defensiva em C #, de pluralsight
  • Como: transmitir com segurança usando como e é os operadores (Guia de programação C #), do msdn