我正在尝试这样做:
class point
{
public int x;
public int y;
}
point[] array = new point[100];
array[0].x = 5;
以下是错误信息:
对象引用未设置为对象实例。(@ 最后一行)出了什么问题? :P
它仅创建了数组,但所有元素都初始化为null。
你需要一个循环或类似的东西来创建你的类的实例。
(在这种情况下,foreach循环不起作用)
例如:
point[] array = new point[100];
for(int i = 0; i < 100; ++i)
{
array[i] = new point();
}
array[0].x = 5;
Point
是一个结构体而不是类(就像BCL中的Point类型一样),那么您就不需要担心这个问题。在数组中使用类时需要“new”,但结构体则不需要。 - Chris Shainpoint[] array = new point[100];
你创建的是一个数组,而不是100个对象。数组中的元素为空。此时,你需要创建每个元素:
array[0] = new point();
array[0].x = 5;
class point
更改为struct point
,这样new point [500]
将创建一个初始为0,0
的点数组(而不是null的数组)。正如其他答案所解释的那样,您需要在每个数组位置上初始化对象。您可以使用以下方法之一来创建预初始化的数组
T[] CreateInitializedArray<T>(int size) where T : new()
{
var arr = new T[size];
for (int i = 0; i < size; i++)
arr[i] = new T();
return arr;
}
T[] CreateInitializedArray<T>(int size, Func<T> factory)
{
var arr = new T[size];
for (int i = 0; i < size; i++)
arr[i] = factory();
return arr;
}
LINQ的两种方法版本都很简单,但我认为略微不太高效。
int[] asd = new int[99];
for (int i = 0; i < 100; i++)
asd[i] = i;
类似这样的吗?
for (int i=0; i < asd.Length; ++i)
。我们不想冒险发生 IndexOutOfRangeException 错误。 :) - Skalliusing System.Linq;
const int pointsCount = 100;
point[] array = Enumerable.Range(0, pointsCount)
.Select(_ => new point())
.ToArray()
array[i] = new point()
。 - Guillaumearray[0]
,那么你怎么能将它的值设置为5
呢? - David Schwartz