Như những người khác đã chỉ ra, việc gọi một phương thức mở rộng trên tham chiếu null làm cho đối số này là null và sẽ không có gì khác đặc biệt xảy ra. Điều này đưa ra một ý tưởng để sử dụng các phương pháp mở rộng để viết các mệnh đề bảo vệ.
Bạn có thể đọc bài viết này để biết ví dụ: Cách giảm độ phức tạp theo chu kỳ: Điều khoản bảo vệ Phiên bản ngắn là đây:
public static class StringExtensions
{
public static void AssertNonEmpty(this string value, string paramName)
{
if (string.IsNullOrEmpty(value))
throw new ArgumentException("Value must be a non-empty string.", paramName);
}
}
Đây là phương thức mở rộng lớp chuỗi có thể được gọi trên tham chiếu null:
((string)null).AssertNonEmpty("null");
Cuộc gọi chỉ hoạt động tốt vì thời gian chạy sẽ gọi thành công phương thức mở rộng trên tham chiếu null. Sau đó, bạn có thể sử dụng phương thức mở rộng này để triển khai các mệnh đề bảo vệ mà không cần cú pháp lộn xộn:
public IRegisteredUser RegisterUser(string userName, string referrerName)
{
userName.AssertNonEmpty("userName");
referrerName.AssertNonEmpty("referrerName");
...
}
Cannot perform runtime binding on a null reference
.