Tại sao Resharper lại thích ở mức độ cao như thế này đối với người Hồi giáo?


13

Khi tôi viết mã như thế này, trong đó obj là một biến cục bộ:

if (obj is IMyInterface)
{
   var result = (IMyInterface)obj;
   // ....
}

Resharper đề nghị thay đổi nó thành mã như thế này:

var result = obj as IMyInterface;
if (result != null)
{
   // ...
}

Tôi thích cái trước, vì nó không cung cấp cơ hội cho các ngoại lệ tham chiếu null vô tình. Những lý do nào để thích hình thức khác?

Tại sao Resharper đề nghị điều này?

Câu trả lời:


25

Trước tiên, hãy xem câu trả lời của Jon Skeet cho câu hỏi chung về việc đúc trong C #:

Đừng làm điều này:

if (randomObject is TargetType)
{
    TargetType foo = (TargetType) randomObject;
    // Do something with foo
}

Việc này không chỉ kiểm tra hai lần mà còn có thể kiểm tra những thứ khác nhau, nếu RandomObject là một trường chứ không phải là một biến cục bộ. Có thể cho "nếu" vượt qua nhưng sau đó diễn viên thất bại, nếu một luồng khác thay đổi giá trị của RandomObject giữa hai.

(...)

Nếu RandomObject có thể là một thể hiện của TargetType và TargetType là một loại tham chiếu, thì hãy sử dụng mã như thế này:

TargetType convertedRandomObject = randomObject as TargetType;
if (convertedRandomObject != null)
{
    // Do stuff with convertedRandomObject
}

Sau đó xem các chủ đề tương tự:


1
+1 Xem thêm Bài đăng trên Blog của Eric Lippert về chủ đề này.
Brian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.