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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:15:31