vs调试 拖动代码到if分支内报空引用错误

hello 20 信誉分
2024-07-12T09:07:46.38+00:00

vs2022 调试时string? chk = null;行报空引用错误。注意有linq操作,没有写linq代码时不报错。

再现步骤

1.断点设定到if (isGo)行。

2.拖动代码到string? chk = null;行。

3.按下f5继续运行后报以下错

System.NullReferenceException:“Object reference not set to an instance of an object.”

chk 是 null。

bool isGo = false;

if (isGo)

{

    string? chk = null;

    chk = "1";

    List<string> lstStr = new List<string> { "1", "2", "3", "4" };

    var str = lstStr.Where(p=>p.Equals(chk)).ToList();

}

.NET
.NET
基于 .NET 软件框架的 Microsoft 技术。
59 个问题
C#
C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
184 个问题
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Jiale Xue - MSFT 45,506 信誉分 Microsoft 供应商
    2024-07-15T09:32:26.32+00:00
    1. 从代码逻辑来看,string? chk = null; 这一行不应该引发 NullReferenceException,因为这只是初始化一个 null 的字符串变量。
    2. 错误可能出现在使用 chk 变量的其他地方,比如 lstStr.Where(p => p.Equals(chk))。当 chknull 时,调用 Equals 方法可能会有问题。

    你可以尝试修改一下代码:

    bool isGo = false;
    
    if (isGo)
    {
        string? chk = null;
        try
        {
            chk = "1";
            List<string> lstStr = new List<string> { "1", "2", "3", "4" };
            
            var str = lstStr.Where(p => p.Equals(chk)).ToList();
        }
        catch (NullReferenceException ex)
        {
            Console.WriteLine($"NullReferenceException caught: {ex.Message}");
        }
    }
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。


你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。