C#读取STL文件ASCII类型,记录的数组被后面的数据覆盖,每一项都变成了最后一次的数据

我能取出单个三角的四个数据(三个坐标(分别放在tt1,tt2,tt3中)和一个法向量(放在tt中)),也能将数据加入数组triangles,但是几次下来以后后面的数据会覆盖之前的数据,例如整个运行一次,数组的第一项储存的是我的第一个数据,但是运行三次以后,数组的每一项都是我最后加入的数据即第三个数据,也就是数组里的每个数据永远都是一样的,之前的数据被后来的覆盖了...是否和triangle实例是全局变量有关的,如果是的话如何修改呢,因为在中间重新实例化Triangle的话,后面switch的域内无法搜索到triangle,谢谢大噶。

public struct Coordinate
    {
        public float X;
        public float Y;
        public float Z;

        internal static Coordinate ReadAscii(string[] points)
        {
            Coordinate coor = new Coordinate();
            coor.X = float.Parse(points[1]);
            coor.Y = float.Parse(points[2]);
            coor.Z = float.Parse(points[3]);
            return coor;
        }
    }

```public class Triangle
    {
        public Coordinate NormalVector { get; set; }
        public Coordinate Vertex1 { get; set; }
        public Coordinate Vertex2 { get; set; }
        public Coordinate Vertex3 { get; set; }
    }

```public static Triangle triangle = new Triangle();
        public static List<Triangle> triangles = new List<Triangle>();
        public static int i = 1;
        public static List<Triangle> ReadAscii(string fileName)
        {
            //以流的方式读取文件
            StreamReader sr = new StreamReader(fileName);
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                line = line.TrimStart();
                if (line.StartsWith("facet normal"))
                {

                    line = line.Substring(12);
                    string[] tt = line.Split(' ');
                    triangle.NormalVector = Coordinate.ReadAscii(tt);
                }
                else
                {
                    if (line.StartsWith("vertex"))
                    {
                        switch (i)
                        {
                            case 1:
                                line = line.Substring(6);
                                string[] tt1 = line.Split(' ');
                                triangle.Vertex1 = Coordinate.ReadAscii(tt1);
                                i++;
                                break;
                            case 2:
                                line = line.Substring(6);
                                string[] tt2 = line.Split(' ');
                                triangle.Vertex2 = Coordinate.ReadAscii(tt2);
                                i++;
                                break;
                            case 3:
                                line = line.Substring(6);
                                string[] tt3 = line.Split(' ');
                                triangle.Vertex3 = Coordinate.ReadAscii(tt3);
                                i = 1;
                                triangles.Add(triangle);
                                break;
                        }
                    }
                }
            }
            return triangles;
        }

while ((line = sr.ReadLine()) != null)
下面加上
triangle = new Triangle();

否则都是同一个对象