You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的异步程序抛出NullReferenceException异常?

解决System.NullReferenceException异常的思路

咱先拆解下这个问题:System.NullReferenceException是.NET开发里碰得最多的异常之一,说白了就是你代码里有个对象是null(没被实例化),但你却直接去调用它的属性、方法或者索引器了,系统自然就报错了。

从报错信息来看,异常出现在GoogleProducts.Program.<Main>d__0.MoveNext()的第60行,也就是你异步的Main方法里的某一行代码。给你几个具体的排查和解决步骤:

  • 第一步:定位问题代码
    打开你的Program.cs,直接跳到第60行,找出所有形如对象.成员(比如product.Id、service.GetData())的代码,这些就是潜在的触发点。

  • 第二步:排查哪个对象是null
    逐个检查这些对象:

    • 是不是你只声明了对象,但没通过new关键字实例化?比如只写了GoogleProduct product;,没写成GoogleProduct product = new GoogleProduct();
    • 是不是某个异步方法(比如你调用的谷歌产品相关接口)返回了null?比如await GetProductAsync()没拿到数据,返回了null,你直接就去访问它的成员了
    • 是不是某个变量被意外赋值为null了?比如之前的逻辑里有product = null;的操作,后续没做判断就用了
  • 第三步:添加空值保护
    找到null的对象后,用这些方式避免异常:

    1. 显式空判断:
      var product = await GetGoogleProductAsync();
      if (product != null)
      {
          // 安全访问product的成员
          Console.WriteLine(product.Title);
      }
      
    2. 使用C#空条件运算符?.:
      var product = await GetGoogleProductAsync();
      // 如果product是null,这行代码会返回null,不会触发异常
      Console.WriteLine(product?.Title);
      
    3. 用空合并运算符??给默认值:
      var product = await GetGoogleProductAsync() ?? new GoogleProduct();
      // 即使返回null,也会用新实例,避免后续报错
      Console.WriteLine(product.Title);
      
  • 调试小技巧
    直接在第60行打个断点,运行程序到这里时,把鼠标悬停在各个对象上,就能看到哪个对象是null,一下子就能定位到问题根源。

内容的提问来源于stack exchange,提问作者Test45

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:38