0

我想我没有正确设置数组或其他东西,但是当它到达它实际将新数组值设置为 color_table 数组的行时会抛出“nullreferenceexception”(应该是你看到的第 7 行和第 12 行以下)。我应该怎么写才能让它起作用?

public int[] colors = new int[] { 0, 255, 0, 255, 0, 255 };

private int[][] color_table;

public void setcolors()
{
    this.color_table[0] = new int[] { 0, 0, 0 };
    for (int i = 1; i <= this.precision; i++) {
        int r = (((this.colors[1] - this.colors[0]) * ((i - 1) / (this.precision - 1))) + this.colors[0]);
        int g = (((this.colors[3] - this.colors[2]) * ((i - 1) / (this.precision - 1))) + this.colors[2]);
        int b = (((this.colors[5] - this.colors[4]) * ((i - 1) / (this.precision - 1))) + this.colors[4]);
        this.color_table[i] = new int[] { r, g, b };
    }
}

我听说你必须在使用它之前用它的长度初始化一个数组,但是a)我不知道该怎么做,b)我不确定它是否有问题。问题是我不知道数组长度是多少。我试过这个无济于事:

private int[this.precision][3] color_table;

谢谢!

4

2 回答 2

3

this.color_table尚未初始化。因此你不能给它赋值。

你的意思是这样的:

public void setcolors()
{
    color_table = new int[precision + 1][];
    for (int i = 1; i <= this.precision; i++)
    {
        int r = (((this.colors[1] - this.colors[0]) * ((i - 1) / (this.precision - 1))) + this.colors[0]);
        int g = (((this.colors[3] - this.colors[2]) * ((i - 1) / (this.precision - 1))) + this.colors[2]);
        int b = (((this.colors[5] - this.colors[4]) * ((i - 1) / (this.precision - 1))) + this.colors[4]);
        this.color_table[i] = new int[] { r, g, b };
    }
}
于 2012-12-28T08:23:10.760 回答
0

如果您不知道数组的长度,请尝试使用 list

    List<int[]> color_table = new List<int[]>();
...
    color_table.Add(new int[] { r, g, b });
于 2012-12-28T08:29:35.107 回答