读书人

List泛型Add后所有值都是最后一次Ad

发布时间: 2012-01-21 21:31:43 作者: rapoo

List泛型Add后,所有值都是最后一次Add的结果。请高物帮忙,解决立即结帐
//程序如下

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
//哪位高人给解决一下



[解决办法]
for(int i = 0; i < 10; i +++
{
test1.Flag = i;
test1.pt = new Point(i,i);
test1.aryMark[0] = i.ToString();

aryTest.Add( test1 );

}

每次都在加同一个对象,感觉是
[解决办法]
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 );

}

[解决办法]
你有把数据从0存到9,但是最后是9把以前的覆盖了,设断点调试下
[解决办法]
test1.aryMark[0] = i.ToString();
这里你每次都是将i放到数组[0]里啊,你的意思应该是写test1.aryMark[i]吧
[解决办法]
楼主的意思是否是想这样:

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 );
[解决办法]
把一个对象添加了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]);
}
}
[解决办法]
MyStructTest虽然是结构体,但是里面的aryMark是分配在堆上的,MyStructTest只保有一个它的引用,aryTest每次add的时候,拷贝一个test1,但里面的aryMark其实都是指向同一个aryMark,循环到最后里面的值是几,aryTest中所有的就都是几。
更改:把
MyStructTest test1;
test1.aryMark = new List <string> ();
test1.aryMark.Add( " ");
三句放到循环里面去。
[解决办法]
test1 10次循环就一个对象,是引用类型
Macosx(结贴) 是正确的

[解决办法]
因为C#默认是传引调用
[解决办法]
test1.aryMark[0] ... 都指向同一个对象,当然出错
[解决办法]
默认是传引调用

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

[解决办法]
不是9才奇怪了
[解决办法]
for(int i = 0; i < 10; i +++
{
test1.Flag = i;
test1.pt = new Point(i,i);
test1.aryMark[0] = i.ToString();


}
aryTest.Add( test1 );
放外边啊,

读书人网 >C#

热点推荐