首頁 > 後端開發 > C++ > 理解並修復 C# 中的'物件引用未設定到物件的實例”

理解並修復 C# 中的'物件引用未設定到物件的實例”

王林
發布: 2024-07-19 01:15:19
原創
820 人瀏覽過

Understanding and Fixing

介紹

C# 開發人員遇到的最常見和令人沮喪的錯誤之一是臭名昭著的物件引用未設定到物件的實例。此錯誤訊息可能會令人困惑,尤其是對於那些剛接觸程式設計的人來說。在本文中,我們將揭開這個錯誤的神秘面紗,解釋其原因,提供一個令人難忘的現實生活類比,並提供預防和修復它的解決方案。

「物件引用未設定到物件的實例」是什麼意思?
通俗地說,當您嘗試使用尚未建立的物件時,就會發生此錯誤。這就像試圖駕駛一輛尚未製造出來的汽車一樣——你無法使用不存在的東西。

從技術角度來說,這個錯誤是 NullReferenceException。當您嘗試存取空物件的成員(方法、屬性、欄位)時,就會發生這種情況。空物件意味著物件引用不指向任何內容或記憶體中不存在該物件的實例。

現實生活類比
想像一下您在家,想要打電話。您伸手去拿手機,但它不在那裡,因為您從未購買過手機。在這種情況下:

  • 手機就是物體。

  • 伸手去拿手機就像嘗試訪問物件的成員。

  • 沒有手機就像物件引用為空。

因此,當您嘗試撥打電話時,您無法撥打電話,因為電話(對象)不存在。同樣,在程式碼中,嘗試使用尚未實例化的物件會導致物件參考未設定為物件實例錯誤。

常見場景與修復:

- 未初始化的物件

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

Person person = null;
Console.WriteLine(person.Name); // Throws NullReferenceException

登入後複製

修正:初始化物件

Person person = new Person();
person.Name = "John";
Console.WriteLine(person.Name); // No error

登入後複製

- 類別中未初始化的成員

class Car
{
    public Engine Engine { get; set; }
}

class Engine
{
    public int Horsepower { get; set; }
}

Car car = new Car();
Console.WriteLine(car.Engine.Horsepower); // Throws NullReferenceException

登入後複製

修正:初始化成員

Car car = new Car { Engine = new Engine() };
car.Engine.Horsepower = 150;
Console.WriteLine(car.Engine.Horsepower); // No error

登入後複製

- 方法回傳 Null

class Repository
{
    public Person GetPersonById(int id)
    {
        // Returns null if person not found
        return null;
    }
}

Repository repo = new Repository();
Person person = repo.GetPersonById(1);
Console.WriteLine(person.Name); // Throws NullReferenceException

登入後複製

修正:檢查 Null

Person person = repo.GetPersonById(1);
if (person != null)
{
    Console.WriteLine(person.Name); // No error if person is not null
}
else
{
    Console.WriteLine("Person not found");
}

登入後複製

- 關於集合的錯誤假設

List<Person> people = null;
Console.WriteLine(people.Count); // Throws NullReferenceException

登入後複製

修正:初始化集合

List<Person> people = new List<Person>();
Console.WriteLine(people.Count); // No error

登入後複製

避免 NullReferenceException 的最佳實踐

  1. 使用空白條件運算子

空條件運算子 (?.) 可以幫助安全地存取可能為空的物件的成員。

Person person = null;
Console.WriteLine(person?.Name); // No error, outputs nothing

登入後複製
  1. 初始化變數與成員

始終初始化變數和類別成員以避免空引用。

class Car
{
    public Engine Engine { get; set; } = new Engine();
}

登入後複製
  1. 執行空檢查

在存取物件的成員之前始終檢查 null。

if (person != null)
{
    Console.WriteLine(person.Name);
}

登入後複製
  1. 透過 LINQ 使用安全導航

使用 LINQ 時,在執行查詢之前確保集合不為 null。

var names = people?.Select(p => p.Name).ToList();

登入後複製

結論
未將物件參考設定為物件實例錯誤是 C# 開發人員常見的絆腳石,但了解其原因並了解如何預防和修復它可以為您省去很多麻煩。始終記住初始化物件並在必要時執行空檢查。牢記這些最佳實踐,您將有能力在未來的專案中處理和避免此錯誤。

LinkedIn 帳號:LinkedIn
推特帳號:推特
信用:圖形源自LoginRadius

以上是理解並修復 C# 中的'物件引用未設定到物件的實例”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板