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中文网其他相关文章!