Using as and is for safe casting in C#
C#
16
White

Quan viết ngày 21/06/2015

Doing a cast in C# is to tell the compiler to do an explicit conversion to convert the type of an object from one to another, and by explicit it means that you are aware that data may be truncated during the operation. For example : converting a decimal to a float.

Let's take a look at this example

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

The problem with the above code is if the event handler is no longer called by the Button type, it throws an InvalidCastException.

C# provides you two solutions

Using 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
    }
}

Using 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
    }
}

and voila, no more InvalidCastException.

Now what should you use is the next thing you should consider, as or is or just fail fast and catch the InvalidCastException. The answer is it depends on you and your application. Take a look at this StackOverflow answer for more discussion on what to use.

References
  • Defensive Coding in C#, from pluralsight
  • How to: Safely Cast by Using as and is Operators (C# Programming Guide), from msdn
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Quan

1 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
White
22 4
Tạo dummy data với Faker và Mockaroo – Xa rồi những ngày nhập tay nhàm chán Cuộc đời một thằng developer có rất nhiều việc rất chán nhưng phải làm...
Huy Hoàng Phạm viết hơn 2 năm trước
22 4
Male avatar
5 2
Sử dụng OpenCV function với C.Net Nếu bạn đã từng làm một số project có liên quan đến xử lý ảnh thì chắc hẳn sẽ biết thư viện OpenCV. Hiện tại đã ...
vankhangfet viết hơn 2 năm trước
5 2
Male avatar
1 0
disk I/O error Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for mor...
Anh Dũng viết hơn 2 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
1 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!