首页  >  文章  >  后端开发  >  理解并修复 C# 中的“对象引用未设置到对象的实例”

理解并修复 C# 中的“对象引用未设置到对象的实例”

王林
王林原创
2024-07-19 01:15:19688浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn