C#定义嵌套列表时遇类型转换错误,求代码修正方案
解决嵌套坐标列表的代码错误
错误核心原因
你遇到的编译错误是类型不匹配导致的:
positionGroups是List<Positions>类型,其中Positions是继承自List<XYPos>的自定义类- 你试图用
List<XYPos>作为参数构造List<Positions>,但List<XYPos>和IEnumerable<Positions>之间没有合法的转换关系,编译器无法识别这种类型转换。
修正方案1:沿用自定义 Positions 类
既然已经定义了 Positions 作为 List<XYPos> 的子类,直接创建 Positions 实例存储坐标,再添加到 positionGroups 即可:
// == 类定义 public class XYPos { public int x { get; set; } public int y { get; set; } } public class Positions : List<XYPos>{}
// == 修正后的数据定义代码 var positionGroups = new List<Positions>(); // 第一组坐标 var positions = new Positions(); positions.Add(new XYPos { x = 50, y = 25}); positionGroups.Add(positions); // 第二组坐标 var positions2 = new Positions(); positions2.Add(new XYPos { x = 33, y = 50}); positions2.Add(new XYPos { x = 66, y = 50}); positionGroups.Add(positions2);
修正方案2:移除自定义类,直接用嵌套泛型列表
如果不需要扩展 List<XYPos> 的额外功能,直接使用 List<List<XYPos>> 会更简洁,避免不必要的子类定义:
// == 仅保留坐标类 public class XYPos { public int x { get; set; } public int y { get; set; } }
// == 数据定义代码 var positionGroups = new List<List<XYPos>>(); // 第一组坐标 var positions = new List<XYPos>(); positions.Add(new XYPos { x = 50, y = 25}); positionGroups.Add(positions); // 第二组坐标 var positions2 = new List<XYPos>(); positions2.Add(new XYPos { x = 33, y = 50}); positions2.Add(new XYPos { x = 66, y = 50}); positionGroups.Add(positions2);
内容的提问来源于stack exchange,提问作者David Rouse
相关产品推荐
相关产品推荐

