You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以最简洁写法初始化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:05:23