集合初始化器报错及菜单实体视图模型技术咨询
解决“无法使用集合初始化器初始化类型,因为该类型未实现'System.Collections.IEnumerable'”错误
我来帮你梳理这个问题的根源和解决办法哈~
为啥会出这个错?
C#里的集合初始化器(就是那种用{ { ... }, { ... } }的语法)有个硬性要求:你要初始化的类型必须实现System.Collections.IEnumerable接口,而且得有对应的Add方法。但你贴的UstMenuler是单个主菜单的实体类,它本身不是集合类型,所以如果你试图用集合初始化器去创建单个UstMenuler对象,就会触发这个错误。
举个错误的例子,你可能写了类似这样的代码:
// 错误示范:用集合初始化器操作单个实体 var wrongMenu = new UstMenuler { { "首页", true, 1, "Home", "Index" } };
正确的写法应该是这样
1. 初始化单个主菜单实体
单个实体要用对象初始化器,直接给每个属性赋值就行:
var mainMenu = new UstMenuler { Name = "首页", AktifMi = true, YetkiID = 1, ControllerName = "Home", ActionName = "Index", // 这里给子菜单集合赋值时可以用集合初始化器,因为HashSet实现了IEnumerable AltMenuler = new HashSet<AltMenuler> { new AltMenuler { Name = "子菜单1", AktifMi = true }, new AltMenuler { Name = "子菜单2", AktifMi = false } } };
2. 初始化多个主菜单的集合
如果你要创建一堆主菜单的集合,得用集合类型(比如List<UstMenuler>),这时候才能用集合初始化器:
var menuList = new List<UstMenuler> { new UstMenuler { Name = "首页", AktifMi = true, ControllerName = "Home", ActionName = "Index" }, new UstMenuler { Name = "用户管理", AktifMi = true, ControllerName = "User", ActionName = "List", AltMenuler = new HashSet<AltMenuler> { new AltMenuler { Name = "用户列表", AktifMi = true }, new AltMenuler { Name = "添加用户", AktifMi = true } } } };
视图模型那边要注意啥?
你提到已经创建了菜单视图模型,记得视图模型里的集合属性得是实现了IEnumerable的类型(比如List<UstMenulerViewModel>、ICollection<AltMenulerViewModel>)。举个视图模型的例子:
public class UstMenulerViewModel { public int ID { get; set; } public string Name { get; set; } public bool AktifMi { get; set; } public string ControllerName { get; set; } public string ActionName { get; set; } // 直接初始化空集合,避免空引用问题 public ICollection<AltMenulerViewModel> AltMenuler { get; set; } = new List<AltMenulerViewModel>(); } public class AltMenulerViewModel { public int ID { get; set; } public string Name { get; set; } public bool AktifMi { get; set; } public int UstMenuID { get; set; } }
这样你在初始化视图模型的集合时,就能正常用集合初始化器啦。
最后总结下
- 单个实体用对象初始化器(直接给属性赋值),别用集合初始化器的语法
- 只有集合类型(比如List、HashSet这类实现了IEnumerable的)才能用集合初始化器
- 检查你代码里用集合初始化器的地方,确认目标是集合而不是单个实体
内容的提问来源于stack exchange,提问作者user9582479
相关产品推荐
相关产品推荐

