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 decimal
em 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 Button
tipo, 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, as
ou is
ou 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