Nội dung bài viết
Object reference not set to an instance of an object nghĩa là gì?
Lỗi “Object reference not set to an instance of an object” là một “đặc sản” mà hầu hết lập trình viên, từ newbie đến senior, đều ít nhất một lần nếm trải. Đừng hoảng sợ, lỗi này không hề đáng sợ như bạn nghĩ. Hiểu một cách đơn giản, nó xuất hiện khi bạn cố gắng sử dụng một đối tượng (object) nhưng nó chưa được khởi tạo, tức là nó đang có giá trị null. Khi bạn “gọi” một đối tượng đang null, “object reference not set to an instance of an object” sẽ xuất hiện. Merakicenter.edu.vn sẽ giúp bạn hiểu rõ hơn về lỗi này qua ví dụ sau.
Để minh họa, hãy xem xét đoạn code sau:
public void Push(IMessage message){ var type = message.GetType(); if (type == typeof(EmailMessage)) { var service = _services.First(c => c.GetType() == typeof(EmailMessageService)); service.Delivery(message); }}
Hàm Push này nhận một IMessage, xác định kiểu của nó, và sau đó “deliver” nó bằng một service tương ứng. Vậy, hàm này có thể “ném” ra lỗi “object reference not set to an instance of an object” không? Câu trả lời là có. Vậy, những vị trí nào có thể gây ra lỗi tham chiếu null này?
Các nguyên nhân phổ biến gây ra lỗi “Object reference not set…”
-
messagelà null: Nếu interfaceIMessagetruyền vào hàmPushbị null, thì ngay dòngmessage.GetType()sẽ “ném” ra exception “object reference not set to an instance of an object”. Đây là lỗi tham chiếu null cơ bản nhất.
-
_serviceschưa được khởi tạo: Việc sử dụng LINQ với hàmFirst()có thể gây ra lỗi này nếu list_serviceschưa được khởi tạo. Lúc này_servicessẽ là null, và việc gọi phương thức trên một đối tượng null là không thể.
-
Không tìm thấy service phù hợp: Giả sử
_servicesđã được khởi tạo, nhưng nếu LINQ không tìm thấy service nào phù hợp (ví dụ, không cóEmailMessageServicetrong_services), thìFirst()sẽ trả vềnull. Do đó, dòngservice.Delivery(message)sẽ “ném” ra lỗi “object reference not set to an instance of an object”. Đây cũng là một lỗi tham chiếu null thường gặp.
Như bạn thấy, chỉ một hàm đơn giản có thể tiềm ẩn nhiều nguy cơ gây ra lỗi “object reference not set to an instance of an object”.
Vậy, giải pháp là gì?
Thay vì cố gắng “bắt” lỗi (try-catch) ngay trong hàm business logic này, hãy để nó “ném” lỗi ra ngoài. Lỗi thực sự không nằm ở hàm Push, mà ở nơi gọi hàm này. Hàm Push bị gọi với một đối tượng null.
Nói cách khác, hãy tìm về “cội nguồn” của lỗi. Lần theo dấu vết xem đối tượng nào (parameter) bị truyền vào hàm Push với giá trị null.
Tóm lại, khi gặp lỗi “Object reference not set to an instance of an object”, hãy:
- Kiểm tra parameter khác null: Đảm bảo các parameter truyền vào hàm business logic không bị null trước khi gọi hàm.
- Kiểm tra khởi tạo đối tượng: Xác minh các đối tượng bạn sử dụng đã được khởi tạo hay chưa.
- Truy tìm đối tượng cha: Tìm hiểu xem đối tượng nào đang null hoặc chưa được khởi tạo ở “tầng” trên.
- Xử lý lỗi ở tầng UI/Presentation: Bắt lỗi ở tầng giao diện người dùng hoặc presentation layer, thông báo lỗi cho người dùng, hoặc ghi log lại để phân tích. Điều này giúp duy trì tính ổn định của ứng dụng.
Hãy nhớ, “object reference not set to an instance of an object” không phải là tận thế. Bằng cách tiếp cận vấn đề một cách hệ thống, bạn có thể dễ dàng tìm ra nguyên nhân và khắc phục nó. Chúc bạn thành công!

Nội dung được phát triển bởi đội ngũ Meraki Center với mục đích chia sẻ và tăng trải nghiệm khách hàng. Mọi ý kiến đóng góp xin vui lòng liên hệ tổng đài chăm sóc: 1900 0000 hoặc email: [email protected]