2015-11-08 15 views
10

Tôi đang gặp phải một System.NullReferenceException thú vị trong khi sử dụng toán tử null-điều kiện mới trong C#. Các mã sau đây mang lại cho tôi một NullReferenceException nếu "MyObject" là null:C# Lỗi với toán tử null và có điều kiện chờ đợi

await this.MyObject?.MyMethod() 

tôi sẽ đã mong rằng lời kêu gọi "MyMethod" sẽ đơn giản là không được thực hiện nếu "MyObject" là null, hay tôi hiểu lầm mục đích của toán tử null-điều kiện?

Trả lời

9

Bạn có thể thêm ?? Nhà điều hành để nếu ?. trả về tác vụ sử dụng null, thay vào đó là CompletedTask.

await (this.MyObject?.MyMethod() ?? Task.CompletedTask) 

tôi sẽ đã mong rằng lời kêu gọi "MyMethod" sẽ đơn giản là không được thực hiện nếu "MyObject" là null.

Đúng vậy. toán tử ?. trả về tác vụ vô giá trị thay vì gọi số MyMethod. ngoại lệ tham chiếu null được thực hiện bởi vì bạn không thể chờ đợi nhiệm vụ null. Nhiệm vụ phải được khởi tạo.

Các vấn đề liên quan