C# 11:带后备字段的required init属性触发空值警告问询
C# 11中required init属性带后备字段触发空值警告的问题
在C# 11环境下,定义带有后备字段的required init属性时,会触发CS8618空值警告:
Warning CS8618 Non-nullable field '_name' must contain a non-null value when exiting constructor. Consider declaring the field as nullable.
触发警告的代码如下:
public class TestRequiredInit { private readonly string _name; public required string Name { get => _name; init => _name = value; } }
实际上,创建TestRequiredInit实例时必须给Name属性赋值,不可能出现_name为空的情况,但编译器仍会抛出该警告。另外,因为需要在属性初始化器中添加自定义校验逻辑(示例代码如下),所以无法使用自动属性。想请教这是MSBuild/Visual Studio的Bug,还是我对语法的理解存在疏漏?
带自定义逻辑的代码:
public class TestRequiredInit { private readonly string _name; public required string Name { get => _name; init { if (value.Length > 50) { throw new ArgumentException(); } _name = value; } } }
内容的提问来源于stack exchange,提问作者Joas
相关产品推荐
相关产品推荐

