C#类图作业:Track构造函数Section类型转换CS1503错误求助
C#类图作业:Track构造函数类型不匹配问题解决
你的思路完全正确——必须把SectionTypes枚举值转换为Section类实例才能存入LinkedList<Section>,CS1503错误就是因为直接把枚举值塞进了需要对象实例的集合,类型不匹配导致的。你的Section类代码没有问题,只需要在Track的构造函数里完成枚举到实例的转换。
修正后的Track类代码
namespace Model { internal class Track { public string Name { get; set; } public LinkedList<Section> Sections { get; set; } public Track(string name, SectionTypes[] sections) { Name = name; // 先初始化链表,避免空引用 Sections = new LinkedList<Section>(); // 遍历枚举数组,逐个创建Section实例并加入链表 foreach (var sectionType in sections) { Sections.AddLast(new Section { SectionType = sectionType }); } } } }
更简洁的LINQ写法(需引用System.Linq)
如果想让代码更紧凑,可以用LINQ快速转换数组:
using System.Linq; namespace Model { internal class Track { public string Name { get; set; } public LinkedList<Section> Sections { get; set; } public Track(string name, SectionTypes[] sections) { Name = name; Sections = new LinkedList<Section>(sections.Select(st => new Section { SectionType = st })); } } }
关键说明
- 必须为每个
SectionTypes枚举值创建对应的Section实例,因为LinkedList<Section>存储的是对象,不是枚举值 - 初始化
Sections链表很重要,否则后续操作链表时会触发空引用异常
内容的提问来源于stack exchange,提问作者Daan T
相关产品推荐
相关产品推荐

