C#-写入其他数组时,对象数组中的值将被覆盖

时间:2019-11-20 10:15:55

标签: c# arrays memory

在我正在编写的程序中,我正在从二进制文件中解析颜色数据,然后将数据添加到Frame对象数组(我自己的类)中。但是,从for主循环的第75次迭代开始,写入一个临时颜色数组,然后再添加到下一个Frame中,将覆盖Frames数组中的某些现有颜色。

这是写入临时颜色数组的for循环:

for (int i = 0; i < 16; i++)
{
    if (Utils.GetBit(bitMask, 15 - i))
    {
        ushort stC = 0;
        stC |= Convert.ToUInt16(byteArray[byteIndex++] << 8);
        stC |= Convert.ToUInt16(byteArray[byteIndex++]);
        tcolors[i] = Utils.ST2RGB(stC); //converts Atari ST color to ARGB. when this runs on the 75th iteration of the main for loop, it starts overwriting existing color data in the Frame array
    }
}

Utils.ST2RGB

public static Color ST2RGB(ushort stC)
{
    try
    {
        byte blue = Convert.ToByte(((stC & 0x007) & 0xff) << 5);
        byte green = Convert.ToByte((((stC & 0x070) >> 4) & 0xff) << 5);
        byte red = Convert.ToByte((((stC & 0x700) >> 8) & 0xff) << 5);

        return Color.FromArgb(red, green, blue);
    }
    catch
    {
        return Color.Black;
    }
}

这是将临时值添加到数组的新Frame中的代码:

Frame tmpFrame = new Frame();
tmpFrame.clearScreen = tclearScreen;
tmpFrame.colorIndex = tcolorIndex;
tmpFrame.colors = tcolors; // <-------
tmpFrame.hasPalette = thasPalette;
tmpFrame.isIndexed = tisIndexed;
tmpFrame.numOfPolys = tnumOfPolys;
tmpFrame.polygonVerts = tpolygonVerts;
tmpFrame.vertexID = tvertexID;
tmpFrame.vertices = tvertices;
frames[f] = tmpFrame; //'f' is the main for loop iterator

我还将包括一些调试数据。

第一个主循环上的第一个Frame的颜色数据用于循环迭代: The first Frame's color data on the first main for loop iteration.

第75个主循环之后的第一个Frame的颜色数据,用于循环迭代: The first Frame's color data after the 75th main for loop iteration.

第200个主循环上第一个Frame的颜色数据用于循环迭代: The first Frame's color data on the 200th main for loop iteration.

首先,临时变量和数组的名称与Frame类中的名称相同,因此我认为这是问题所在,并在临时变量的开头添加了t。但这并没有改变任何东西。

我非常困惑,因为这不应该发生。关于原因的任何提示或想法?

0 个答案:

没有答案