如何在C# 12中使用主构造函数体?解决.NET 8编译报错
C# 12主构造函数体编译失败的解决方法
问题根源
你碰到的编译错误,是因为所用的.NET 8 SDK版本对C# 12的主构造函数初始化块支持不足,或是项目未正确配置C# 12语言版本。
正确使用方案
1. 强制项目启用C# 12
打开项目的.csproj文件,添加或修改语言版本配置:
<PropertyGroup> <LangVersion>12.0</LangVersion> </PropertyGroup>
2. 调整初始化逻辑的写法
如果SDK版本仍不支持独立的初始化块,可通过以下两种方式修改代码:
方式一:显式实现主构造函数
把校验逻辑放到显式的主构造函数实现中:
public class C(int i, string s) : B(s) { public C(int i, string s) : this(i, s) { if (i < 0) throw new ArgumentOutOfRangeException(nameof(i)); } int[] a = new int[i]; public int S => s; }
方式二:整合校验到字段初始化
将参数校验逻辑直接合并到字段初始化语句里:
public class C(int i, string s) : B(s) { int[] a = i >= 0 ? new int[i] : throw new ArgumentOutOfRangeException(nameof(i)); public int S => s; }
3. 更新.NET 8 SDK到最新补丁版
微软在.NET 8的后续更新中完善了C# 12特性的兼容性,更新到最新SDK后,就能直接使用原始示例中的写法。
内容的提问来源于stack exchange,提问作者אפרת
相关产品推荐
相关产品推荐

