如何以最简洁写法初始化Point数组?适配大量硬编码点数据场景
简洁初始化Point数组的方案
一、将int[,]转换为Point[]的方法
如果你已经用int[,]写出了最简洁的硬编码数据,可以通过以下两种方式转换成Point[]:
1. 使用LINQ(简洁写法)
int[,] arr = new int[,] { { 0, 0 }, { 20, 120 }, { 40, 60 } }; Point[] points = Enumerable.Range(0, arr.GetLength(0)) .Select(i => new Point(arr[i, 0], arr[i, 1])) .ToArray();
2. 普通循环(无需LINQ依赖)
int[,] arr = new int[,] { { 0, 0 }, { 20, 120 }, { 40, 60 } }; Point[] points = new Point[arr.GetLength(0)]; for (int i = 0; i < arr.GetLength(0); i++) { points[i] = new Point(arr[i, 0], arr[i, 1]); }
二、更简洁的Point数组/List初始化替代方案
1. 自定义静态简化方法(最推荐)
写一个静态辅助类封装Point的创建,把重复的new Point(x,y)简化成短方法:
public static class PointHelper { public static Point P(int x, int y) => new Point(x, y); }
在代码顶部添加using static直接调用,初始化代码会变得非常简洁:
using static YourNamespace.PointHelper; // 初始化数组 Point[] points = { P(0, 0), P(20, 120), P(40, 60) }; // 初始化List<Point> List<Point> pointList = new List<Point> { P(0, 0), P(20, 120), P(40, 60) };
这种写法既保留了int[,]的简洁性,又直接生成目标类型,无需后续转换。
2. 利用元组数组转换(C# 7+)
先定义语法极简的元组数组,再转换成Point数组/List:
// 元组数组初始化 var tuplePoints = new[] { (0, 0), (20, 120), (40, 60) }; // 转Point数组 Point[] points = tuplePoints.Select(t => new Point(t.Item1, t.Item2)).ToArray(); // 转List<Point> List<Point> pointList = tuplePoints.Select(t => new Point(t.Item1, t.Item2)).ToList();
用解构语法可以进一步提升可读性:
Point[] points = tuplePoints.Select(t => { var (x, y) = t; return new Point(x, y); }).ToArray();
3. 直接简化的List初始化
如果不需要数组,直接用List的集合初始化器配合静态方法,写法同样简洁(C# 9+支持省略new后的类型):
using static YourNamespace.PointHelper; List<Point> pointList = new() { P(0,0), P(20,120), P(40,60) };
内容的提问来源于stack exchange,提问作者1337Grrr
相关产品推荐
相关产品推荐

