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

VS2022调试器在不同作用域同名变量处异常的原因排查

VS2022调试器同名变量Null引用异常成因解析

这是VS2022调试器的符号跟踪逻辑bug,具体成因如下:

  • 从C#语法规则看,if和else if块属于独立的局部作用域,两个同名的parts变量是完全独立的实体,编译器会生成正确的IL代码,所以程序运行本身没有问题。
  • 但VS调试器在处理这类跨分支的同名变量时,错误地将它们映射为同一个调试符号。当程序进入else if块时,调试器会尝试读取之前if块中变量的调试信息——但if块因条件不成立从未执行,对应变量的内存根本没初始化,因此调试器读取时就会抛出Null引用异常。
  • 重命名else if块中的变量后,调试器会为新变量创建独立的调试符号,不会复用未初始化的旧变量信息,自然就能正常显示变量内容。

示例代码:

public class Test
{
    public string part1 { get; set; }
    public string part2 { get; set; }
}

List<Test> test = new List<Test>();
test.Add(new Test(){ part1 = "asad", part2 = "asdasd"});   
test.Add(new Test(){ part1 = "asad", part2 = "asdasd"});   
test.Add(new Test(){ part1 = "asad", part2 = "asdasd"});   

bool check1 = false;
bool check2 = true;

if(check1)
{
    var parts = test.Where(x => x.part1.StartsWith("a"));
}
else if(check2)
{
    var parts = test.Where(x => x.part1.StartsWith("a"));
}

内容的提问来源于stack exchange,提问作者TK-421

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:15:08