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 的最佳實踐
空條件運算子 (?.) 可以幫助安全地存取可能為空的物件的成員。
Person person = null; Console.WriteLine(person?.Name); // No error, outputs nothing
始終初始化變數和類別成員以避免空引用。
class Car { public Engine Engine { get; set; } = new Engine(); }
在存取物件的成員之前始終檢查 null。
if (person != null) { Console.WriteLine(person.Name); }
使用 LINQ 時,在執行查詢之前確保集合不為 null。
var names = people?.Select(p => p.Name).ToList();
結論
未將物件參考設定為物件實例錯誤是 C# 開發人員常見的絆腳石,但了解其原因並了解如何預防和修復它可以為您省去很多麻煩。始終記住初始化物件並在必要時執行空檢查。牢記這些最佳實踐,您將有能力在未來的專案中處理和避免此錯誤。
LinkedIn 帳號:LinkedIn
推特帳號:推特
信用:圖形源自LoginRadius
以上是理解並修復 C# 中的'物件引用未設定到物件的實例”的詳細內容。更多資訊請關注PHP中文網其他相關文章!