Categories: Blog

“Object Reference Not Set”: Nguyên Nhân & Cách Xử Lý Lỗi Chi Tiết


Warning: getimagesize(https://www.freecodecamp.org/news/content/images/size/w2000/2022/09/nullreferenceexception.png): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /www/wwwroot/mncatlinhdd.edu.vn/wp-content/plugins/accelerated-mobile-pages/components/featured-image/featured-image.php on line 64

Lỗi “object reference not set to an instance of an object” là một trong những lỗi phổ biến nhất mà các lập trình viên thường gặp phải, không kể trình độ kinh nghiệm. Vậy lỗi “object reference not set to an instance of an object nghĩa là gì” và làm thế nào để khắc phục nó? Bài viết này sẽ giúp bạn hiểu rõ nguyên nhân và cách xử lý lỗi này một cách hiệu quả.

Nguyên Nhân Gây Ra Lỗi “Object Reference Not Set to an Instance of an Object”

Lỗi “object reference not set to an instance of an object” (tham chiếu đối tượng không được thiết lập đến một thể hiện của đối tượng) xảy ra khi bạn cố gắng sử dụng một đối tượng mà chưa được khởi tạo. Nói cách khác, biến đối tượng đang có giá trị null, và bạn cố gắng truy cập vào một thuộc tính hoặc phương thức của đối tượng null này.

Để dễ hình dung, hãy xem xét ví dụ 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);    }}

Trong đoạn code trên, hàm Push nhận một đối tượng IMessage và thực hiện một số thao tác. Tuy nhiên, có một số điểm có thể gây ra lỗi “object reference not set to an instance of an object”:

  1. messagenull: Nếu đối tượng IMessage truyền vào hàm là null, khi gọi message.GetType() sẽ gây ra lỗi.
  2. _services chưa được khởi tạo: Nếu danh sách _services chưa được khởi tạo, việc gọi _services.First(...) sẽ gây ra lỗi.
  3. Không tìm thấy service phù hợp: Nếu không có service nào trong _services thỏa mãn điều kiện c.GetType() == typeof(EmailMessageService), hàm First() sẽ trả về null, và khi gọi service.Delivery(message) sẽ gây ra lỗi.

Cách Xác Định Vị Trí Lỗi “Object Reference Not Set to an Instance of an Object”

Khi gặp lỗi “object reference not set to an instance of an object”, việc đầu tiên cần làm là xác định dòng code nào gây ra lỗi. Thông thường, thông báo lỗi sẽ chỉ ra dòng code gây ra vấn đề. Sau khi xác định được dòng code, hãy kiểm tra các đối tượng liên quan để xem đối tượng nào đang có giá trị null.

Giải Pháp Khắc Phục Lỗi “Object Reference Not Set to an Instance of an Object”

Dưới đây là một số giải pháp phổ biến để khắc phục lỗi “object reference not set to an instance of an object”:

  1. Kiểm tra null trước khi sử dụng đối tượng: Trước khi truy cập vào một thuộc tính hoặc phương thức của đối tượng, hãy kiểm tra xem đối tượng đó có phải là null hay không. Ví dụ:
    if (message != null){    var type = message.GetType();    // ...}
  2. Đảm bảo đối tượng đã được khởi tạo: Trước khi sử dụng một đối tượng, hãy đảm bảo rằng nó đã được khởi tạo. Ví dụ:
    private List<IService> _services = new List<IService>();
  3. Sử dụng toán tử null-conditional (?.) và null-coalescing (??): Toán tử null-conditional cho phép bạn truy cập vào thuộc tính hoặc phương thức của một đối tượng một cách an toàn, chỉ khi đối tượng đó không phải là null. Toán tử null-coalescing cho phép bạn cung cấp một giá trị mặc định nếu đối tượng là null. Ví dụ:
    service?.Delivery(message); // Chỉ gọi Delivery nếu service không phải là nullvar name = person?.Name ?? "Unknown"; // Gán "Unknown" cho name nếu person hoặc person.Name là null
  4. Kiểm tra các giá trị trả về từ các phương thức: Nếu một phương thức có thể trả về null, hãy kiểm tra giá trị trả về trước khi sử dụng. Ví dụ:
    var service = _services.FirstOrDefault(c => c.GetType() == typeof(EmailMessageService));if (service != null){    service.Delivery(message);}
  5. Xử lý lỗi ở tầng UI hoặc Presentation: Thay vì bắt try-catch trong hàm business logic, hãy để lỗi “object reference not set to an instance of an object” được ném ra ngoài và xử lý ở tầng UI hoặc Presentation. Điều này giúp bạn hiển thị thông báo lỗi thân thiện cho người dùng hoặc ghi lại log để phân tích.

Ví Dụ Minh Họa

Giả sử bạn có một lớp Person với thuộc tính Name:

public class Person{    public string Name { get; set; }}

Nếu bạn cố gắng truy cập thuộc tính Name của một đối tượng Person chưa được khởi tạo, bạn sẽ gặp lỗi “object reference not set to an instance of an object”:

Person person = null;string name = person.Name; // Lỗi: Object reference not set to an instance of an object

Để khắc phục, bạn cần khởi tạo đối tượng Person trước khi truy cập thuộc tính Name:

Person person = new Person();person.Name = "John Doe";string name = person.Name; // Không có lỗi

Hoặc sử dụng toán tử null-conditional và null-coalescing:

Person person = null;string name = person?.Name ?? "Unknown"; // name sẽ là "Unknown"

Kết Luận

Lỗi “object reference not set to an instance of an object” là một lỗi phổ biến nhưng có thể dễ dàng khắc phục nếu bạn hiểu rõ nguyên nhân và áp dụng các giải pháp phù hợp. Việc kiểm tra null, đảm bảo đối tượng đã được khởi tạo, và sử dụng các toán tử hỗ trợ là những kỹ năng quan trọng giúp bạn viết code an toàn và tránh được lỗi này. Khi gặp lỗi, hãy bình tĩnh truy vết, kiểm tra các đối tượng liên quan, và áp dụng các giải pháp đã được trình bày trong bài viết này.

Giáo sư Nguyễn Lân Dũng là một trong những nhà khoa học hàng đầu Việt Nam trong lĩnh vực vi sinh vật học, với hơn 50 năm cống hiến cho giáo dục và nghiên cứu (Wiki). Ông là con trai của Nhà giáo Nhân dân Nguyễn Lân, xuất thân từ một gia đình nổi tiếng hiếu học. Trong sự nghiệp của mình, Giáo sư đã đảm nhiệm nhiều vị trí quan trọng như Chủ tịch Hội các ngành Sinh học Việt Nam, Đại biểu Quốc hội và được phong tặng danh hiệu Nhà giáo Nhân dân vào năm 2010.

Recent Posts

Làm chủ kiến thức Toán 11 Chân Trời Sáng Tạo (tập 2) – Trần Đình Cư

Tài liệu gồm 151 trang, được biên soạn bởi thầy giáo Trần Đình Cư, bao…

2 tuần ago

Phân dạng bài tập Toán 11 quan hệ vuông góc trong không gian

Tài liệu gồm 62 trang, được biên soạn bởi thầy giáo Đặng Công Đức (Giang…

2 tuần ago

Phân dạng chi tiết bài tập môn Toán 11 – Cao Thanh Phúc

Tài liệu gồm 248 trang, được biên soạn bởi thầy giáo Cao Thanh Phúc, phân…

2 tuần ago

Bài giảng môn Toán 11 học kì 2 – Nguyễn Công Hạnh

Tài liệu gồm 222 trang, được biên soạn bởi thầy giáo Nguyễn Công Hạnh (trường…

2 tuần ago

Dạng toán xác định góc nhị diện Toán 11

Tài liệu gồm 14 trang, được biên soạn bởi thầy giáo Lê Bá Bảo, hướng…

2 tuần ago

Hệ thống bài tập trắc nghiệm đạo hàm cơ bản – vận dụng – vận dụng cao

Tài liệu gồm 92 trang, được biên soạn bởi thầy giáo Đặng Công Đức (Giang…

2 tuần ago

This website uses cookies.