创建基于自定义Point结构体的二维数组时类型转换错误求助
解决自定义Point结构体数组初始化的类型转换问题
嗨,我来帮你搞定这个问题~你遇到的错误本质是类型不匹配,咱们一步步理清楚:
为什么会报错?
你定义的数组是Point[,]类型,意味着数组里的每一个元素都必须是Point结构体的实例。但你写的{ 0, 0 }是两个整数,编译器没办法自动把int转换成Point,所以就抛出了类型转换错误。
两种解决办法
方法1:给Point结构体添加构造函数(推荐,更简洁)
给结构体加一个接收x、y参数的构造函数,这样初始化的时候可以直接用new Point(x, y)创建实例:
public struct Point { public int x, y; // 添加构造函数,用来初始化x和y public Point(int x, int y) { this.x = x; this.y = y; } }; static void Main(string[] args) { // 用构造函数创建Point实例来填充数组 Point[,] points = { { new Point(0, 0) }, { new Point(1, 0) }, { new Point(2, 1) }, { new Point(1, 2) }, { new Point(0, 2) } }; }
方法2:直接初始化Point的字段
如果不想加构造函数,也可以用对象初始化器语法,直接给每个Point的x、y赋值:
public struct Point { public int x, y; }; static void Main(string[] args) { Point[,] points = { { new Point { x = 0, y = 0 } }, { new Point { x = 1, y = 0 } }, { new Point { x = 2, y = 1 } }, { new Point { x = 1, y = 2 } }, { new Point { x = 0, y = 2 } } }; }
额外小建议:选对数组类型
看你的代码,你是想存储一组独立的二维点,其实用一维数组Point[]更合适(二维数组是用来表示行和列的表格结构,比如矩阵)。修改后的代码会更简洁:
Point[] points = { new Point(0, 0), new Point(1, 0), new Point(2, 1), new Point(1, 2), new Point(0, 2) };
刚开始接触C#的类型系统很容易犯这类小错误,多写几次就熟练啦~
内容的提问来源于stack exchange,提问作者Minimaksas
相关产品推荐
相关产品推荐

