C# 如何初始化点的数组?

C# 如何初始化点的数组?,c#,arrays,constructor,initialization,point,C#,Arrays,Constructor,Initialization,Point,我需要初始化一个由三个点组成的数组。 我想像下面这样写,但三个元素只写一次 Point P = new Point { X = 0, Y = 1 }; Point[] P = new Point[3];// <---- ? 点P=新点{X=0,Y=1}; 点[]P=新点[3];// 没有一个真正的速记。三次,只需写三次: Point initial = new Point { X = 0, Y = 1 }; Point[] P = new Point[3] { initial, in

我需要初始化一个由三个点组成的数组。 我想像下面这样写,但三个元素只写一次

Point P = new Point { X = 0, Y = 1 };

Point[] P = new Point[3];// <----  ?
点P=新点{X=0,Y=1};

点[]P=新点[3];// 没有一个真正的速记。三次,只需写三次:

Point initial = new Point { X = 0, Y = 1 };
Point[] P = new Point[3] { initial, initial, initial };

以下是创建3个不同点阵列的代码:

Point[] points = new Point[] { new Point { X = 0, Y = 1 }, new Point { X = 2, Y = 1 }, new Point { X = 0, Y = 3 } };

因为您对具有静态坐标的静态定长点数组的处理有疑问,所以当数组初始化如此简单时,不需要在这种上下文中处理LINQ和循环

因此,可以通过以下方式初始化阵列:

Point[] P = new Point[] 
{ 
    new Point { X = 0, Y = 1 }, 
    new Point { X = 0, Y = 1 }, 
    new Point { X = 0, Y = 1 },
    ...
};
或者使用duck类型推断(谢谢):


下面的示例中,您可以使用
可枚举范围创建10个

var points = Enumerable.Range(0, 10)
            .Select(x => new Point {X = 0, Y = 1})
            .ToArray();

以下是最短的解决方案:

Point[] points = Enumerable.Repeat<Point>(new Point(0, 1), 3).ToArray();
Point[]points=Enumerable.Repeat(新点(0,1,3).ToArray();

你的意思是“initial,initial,initial”而不是“P,P,P”?@PieterGeerkens:花了几秒钟时间:D3对同一个的引用object@CuongLe:抱歉,我假定是值类型的
系统.Drawing.Point
。如果不是这样的话,我将删除它。仅供参考,在本示例中,数组大小不必显式设置(数字3可以省略)。
Enumerable.Repeat()
Repeat将使用相同的点实例,对吗?@HonzaBrestan:refere Servy'scomment@HonzaBrestan
是一种值类型,因此这是不可能的,除非OP创建了自己的自定义
类。@Servy:你说得对,这肯定不是最短的。如果你想在这里玩代码高尔夫,你可以使用
var
而不是指定类型,省略
Repeat
的泛型参数,并删除不需要的空白。“生成一个包含一个重复值的序列。”完整数组的同一个实例。当编写“simple”需要更多时间时解决方案您试图保存什么?同样,在问题的上下文中,使用良好的旧数组初始化初始化三个静态点要比循环或使用LINQ快得多。我不介意其他有很多点的上下文,或者当数组是动态的,或者当计算点坐标时。静态集在运行时会稍微快一点,但它需要更多的开发人员时间来写/读/修改。在几乎所有的上下文中,运行速度的几纳秒甚至不值得一分钟的开发时间。@minitech没有。我的任务是完成一系列不同的值
Point[] points = Enumerable.Repeat<Point>(new Point(0, 1), 3).ToArray();