如何解决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
相关产品推荐
相关产品推荐

