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

数组的数组与可为空引用类型结合时的编译问题问询

关于C#可为空复合数组类型编译错误的问题解答

这是C#编译器在处理可为空引用类型与复合数组类型组合时的已知bug,在C# 8、9的早期版本中普遍存在。

问题核心

  • C#语法里的数组括号写法(比如string[,]代表二维数组)和.NET运行时IL层面的类型表示顺序本来就有差异,但常规使用时编译器会自动适配,不会出问题。
  • 启用可为空引用类型后,如果给“数组的数组”里的内层数组加可为空标记(比如写string[,]?[],意思是一个一维数组,它的每个元素是可空的二维string数组),编译器会错误抛出CS0022编译错误,提示索引数量不匹配,但实际上这个类型的秩和代码里的索引使用是完全匹配的。
  • 反过来调整括号和可为空标记的顺序(比如写成string[,][]?,代表一个可空的、元素为二维string数组的一维数组)就能正常编译,但这其实是绕开了编译器的解析bug,并不是符合原需求的写法。
  • 另外,错误写法如果强行编译(比如通过某些非正规方式),生成的IL类型顺序会乱掉,这也证明编译器在处理这类复合类型的可为空标记时,语法解析逻辑有漏洞。

修复状态

这类问题在C# 10及之后的版本里已经被官方修复,编译器能正确识别T[,]?[]这类复合可空数组类型,不会再触发错误的CS0022提示,生成的IL类型也符合预期。

内容的提问来源于stack exchange,提问作者Jeppe Stig Nielsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:32:41