关于c#:如何初始化Point数组?

How to initialize an array of Point?

本问题已经有最佳答案,请猛点这里访问。

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

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

Point[] P = new Point[3];// <----  ?

如何正确书写?


下面是创建3个不同点的数组的代码:

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


下面的示例可以使用Enumerable.Range创建10个Point

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


没有真正的速记。只需写三次:

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


因为您的问题是关于具有静态坐标的点的静态固定长度数组,所以在数组初始化如此简单的情况下,不需要在这个上下文中处理LINQ和循环。

因此,可以通过以下方式初始化数组:

1
2
3
4
5
6
7
Point[] P = new Point[]
{
    new Point { X = 0, Y = 1 },
    new Point { X = 0, Y = 1 },
    new Point { X = 0, Y = 1 },
    ...
};

或使用duck typingtype interrusion(感谢Minitech):

1
2
3
4
5
6
7
var P = new []
{
    new Point { X = 0, Y = 1 },
    new Point { X = 0, Y = 1 },
    new Point { X = 0, Y = 1 },
    ...
};


以下是最短的解决方案:

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