//程序如下
  
        public struct MyStructTest
        {
            public int Flag;
            public Point pt;
            public List<string> aryMark
         };
        List<MyStructTest> aryTest = new List<MyStructTest>(); MyStructTest test1;
test1.aryMark = new List<string>();
test1.aryMark.Add(""); for(int i = 0; i < 10; i +++
{
test1.Flag = i;
test1.pt = new Point(i,i);
test1.aryMark[0] = i.ToString(); aryTest.Add( test1 ); }//错误结果
//最后得到的aryTest中,所有元素的aryMark[0]值都是9。本来我希望的是从0-9
//哪位高人给解决一下

解决方案 »

  1.   

    for(int i = 0; i < 10; i +++
    {
    test1.Flag = i;
    test1.pt = new Point(i,i);
    test1.aryMark[0] = i.ToString(); aryTest.Add( test1 ); }每次都在加同一个对象,感觉是
      

  2.   

    MyStructTest makeMyStruct()
    {
                      MyStructTest test1;
    test1.aryMark = new List<string>();
    test1.aryMark.Add("");
    }for(int i = 0; i < 10; i++)
    {
                               MyStructTest test1 = makeMyStruct();
    test1.Flag = i;
    test1.pt = new Point(i,i);
    test1.aryMark[0] = i.ToString(); aryTest.Add( test1 ); }
      

  3.   

    test1.aryMark[0] = i.ToString();
    这里你每次都是将i放到数组[0]里啊,你的意思应该是写test1.aryMark[i]吧
      

  4.   

    楼主的意思是否是想这样:        public struct MyStructTest
            {
                public int Flag;
                public Point pt;
                public List<string> aryMark
             };
            List<MyStructTest> aryTest = new List<MyStructTest>(); MyStructTest test1;
    test1.aryMark = new List<string>();
    test1.aryMark.Add(""); for(int i = 0; i < 10; i +++
    {
    test1.Flag = i;
    test1.pt = new Point(i,i);
    test1.aryMark[i] = i.ToString();
    } aryTest.Add( test1 );
      

  5.   

    把一个对象添加了10次 当然得到10个相同的对象 就改为
            static void Main(string[] args)
            {
                List<MyStructTest> aryTest = new List<MyStructTest>();            for (int i = 0; i < 10; i++)
                {
                    MyStructTest test1;
                    test1.aryMark = new List<string>();
                    test1.aryMark.Add("");
                    test1.Flag = i;
                    test1.pt = new Point(i, i);
                    test1.aryMark[0] = i.ToString();                aryTest.Add(test1);
                }
                foreach (MyStructTest test in aryTest)
                {
                    Console.WriteLine(test.aryMark[0]);
                }
            }
      

  6.   

    MyStructTest虽然是结构体,但是里面的aryMark是分配在堆上的,MyStructTest只保有一个它的引用,aryTest每次add的时候,拷贝一个test1,但里面的aryMark其实都是指向同一个aryMark,循环到最后里面的值是几,aryTest中所有的就都是几。
    更改:把
    MyStructTest test1;
    test1.aryMark = new List<string>();
    test1.aryMark.Add("");
    三句放到循环里面去。
      

  7.   

    test1 10次循环就一个对象,是引用类型 
    Macosx(结贴) 是正确的
      

  8.   

    呵呵,感谢,刚出去了一趟。在循环里new是可以的,难到非得每次都new一个,这也太麻烦了?准备结帐了
      

  9.   

    test1.aryMark[0] ... 都指向同一个对象,当然出错
      

  10.   

    解决方法只能在循环内new?有没有其它解决办法?
      

  11.   

    MyStructTest test1;
    test1.aryMark = new List<string>();
    test1.aryMark.Add("");
    三句放到循环里面去。
      

  12.   

    for(int i = 0; i < 10; i +++
    {
    test1.Flag = i;
    test1.pt = new Point(i,i);
    test1.aryMark[0] = i.ToString();
    }
    aryTest.Add( test1 );
    放外边啊,
      

  13.   

    反正要New,放哪new 都行,只要在使用前...