C#使用[]初始化List在NET48与NET6.0项目编译失败问题
问题原因与解决方案
核心原因
你使用的private List<string> Names = [];是C# 12引入的集合表达式语法,但你的项目默认配置的C#语言版本不支持该特性,因此无论编译net48还是net6.0都会触发报错:
- .NET 6默认最高支持C# 10,本身不兼容C# 12的集合表达式语法
- .NET Framework 4.8默认最高支持C# 7.3,同样无法识别该语法
解决办法
方法1:升级项目的C#语言版本
在项目的PropertyGroup中添加<LangVersion>12</LangVersion>配置,强制启用C# 12支持,修改后的项目配置如下:
<PropertyGroup> <TargetFrameworks>net48;net6.0</TargetFrameworks> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <LangVersion>12</LangVersion> </PropertyGroup>
注意事项:
- 需安装.NET 7及以上版本的SDK,才能让.NET 6项目支持C# 12特性
- .NET Framework 4.8可通过高版本SDK支持C# 12,但部分依赖高版本框架API的特性无法运行,不过集合表达式初始化
List的场景是兼容的
方法2:改用低版本C#兼容写法
如果不想升级语言版本,直接替换为所有目标框架都支持的初始化代码:
private List<string> Names = new List<string>();
补充说明
C#版本与.NET框架版本并非严格绑定,高版本.NET SDK可让低版本框架项目使用更高版本的C#特性(只要特性不依赖高版本框架专属API)。若开发环境未安装支持C# 12的SDK,即使设置了LangVersion也会报错,需先升级SDK。
内容的提问来源于stack exchange,提问作者For Comment
相关产品推荐
相关产品推荐

