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

如何解决C#中“Required Member必须在对象初始化器或构造函数中设置”错误

required修饰符用法与实例化错误解决

什么是required修饰符

required是C# 10引入的特性,用来标记类的属性必须在创建实例时赋值,编译器会强制检查这一点,保证对象从创建开始就处于有效状态,不会出现必填属性为空的情况。你代码里的StateName加了这个修饰符,所以直接new State()不赋值就会触发编译器错误。

两种正确创建State实例的方法

1. 使用对象初始化器

在实例化时通过{}直接给required属性赋值,同时建议初始化Districts集合避免空引用:

public static void CreateNewState()
{
    State state = new State()
    {
        StateName = "广东省", // 必须赋值的required属性
        Districts = new List<District>() // 可选但推荐,防止后续操作空引用
    };
}

2. 添加带参数的构造函数

给State类写一个包含StateName参数的构造函数,创建实例时通过构造函数传入值,编译器会认可这种赋值方式:

public class State
{
    public int StateId { get; set; }
    public required string StateName { get; set; }
    public ICollection<District> Districts { get; set; }

    // 新增构造函数,强制传入StateName
    public State(string stateName)
    {
        StateName = stateName;
        Districts = new List<District>(); // 提前初始化集合更安全
    }

    public static void CreateNewState()
    {
        State state = new State("广东省");
    }
}

EF Core 相关注意点

  • required修饰符会让EF Core自动将StateName对应的数据库列设为非空(NOT NULL),和数据注解[Required]功能互补:required是编译时检查,[Required]是运行时/数据库层面的约束,两者一起用能更严谨地保障数据有效性。
  • 对于Districts这类导航属性,EF Core查询时会自动填充,但创建新实例时最好初始化为空集合,避免后续添加District时出现NullReferenceException。

内容的提问来源于stack exchange,提问作者SeekerOfKnowledge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:56:04