如果ArrayList中的结构是struct,并且struct中的项为string,如何修改string呢?
定义了如下的结构体,和一个全局的ArrayList,ArrayList中的元素为一个结果体。
赋值以后想修改struct中string2为晚安,可是操作时改了,但是输出的时候为什么还是原来最初的赋值呢??
struct struc测试
{
public string String1; //被依存单词词号
public string String2; //被依存单词串
}
public ArrayList al测试=new ArrayList();
private void button1_Click(object sender, System.EventArgs e)
{
string s原赋值="";
string s修改值="";
for(int i=0;i<2;i++)
{
struc测试 stTest;
stTest.String1="早安";
stTest.String2="午安";
s原赋值="#"+s原赋值+stTest.String1+"--"+stTest.String2+" ";
this.al测试.Add(stTest);
}
for(int j=0;j<2;j++)
{
struc测试 stTest=(struc测试)this.al测试[j];
stTest.String1="晚安";
}
for(int x=0;x<2;x++)
{
s修改值="#"+s修改值+((struc测试)this.al测试[x]).String1+"=="+((struc测试)this.al测试[x]).String2+" ";
}
this.label1.Text=s原赋值;
this.label2.Text=s修改值;
}
输出的结构为:
##早安--午安 早安--午安
##早安==午安 早安==午安
希望输出的结构为
##早安--午安 早安--午安
##早安==晚安 早安==晚安
程序那里错了呢??
谢谢!
5 个解决方案
#1
存ArrayList的时候是作为object存进去的......不是作为struc测试
#2
如果取出原来的struc测试,再remove了那个元素,下一步操作在insert到相应位置,数组的顺序应该不会变,remove应该是吧最后一条记录代替所删除记录,然后删除要删的记录,insert是先在数组最后添加要添加的记录,然后跟相应位置的记录互换。
#3
struct 是值类型
所以
struc测试 stTest=(struc测试)this.al测试[j];//这里stTest 并不是al测试[j],他们只是值相等;
//stTest.String1="晚安"; 所以这里并不是修改al测试[j].String1 而是修改stTest这个临时变量的String1
有一个解决方案就是把struct改为class
所以
struc测试 stTest=(struc测试)this.al测试[j];//这里stTest 并不是al测试[j],他们只是值相等;
//stTest.String1="晚安"; 所以这里并不是修改al测试[j].String1 而是修改stTest这个临时变量的String1
有一个解决方案就是把struct改为class
#4
修改完后,先删除原先的,再插入现在的,例如:
yourStruct objData = ( yourStruct ) yourArray[i];
// Set new value to your struct object;
// Save new object into arraylist
yourArray.RemoveAt( i );
yourArray.Insert( i, objData );
yourStruct objData = ( yourStruct ) yourArray[i];
// Set new value to your struct object;
// Save new object into arraylist
yourArray.RemoveAt( i );
yourArray.Insert( i, objData );
#5
谢谢hdt 和Knight94
我都试这些方法了呢^_^
谢谢
我都试这些方法了呢^_^
谢谢
#1
存ArrayList的时候是作为object存进去的......不是作为struc测试
#2
如果取出原来的struc测试,再remove了那个元素,下一步操作在insert到相应位置,数组的顺序应该不会变,remove应该是吧最后一条记录代替所删除记录,然后删除要删的记录,insert是先在数组最后添加要添加的记录,然后跟相应位置的记录互换。
#3
struct 是值类型
所以
struc测试 stTest=(struc测试)this.al测试[j];//这里stTest 并不是al测试[j],他们只是值相等;
//stTest.String1="晚安"; 所以这里并不是修改al测试[j].String1 而是修改stTest这个临时变量的String1
有一个解决方案就是把struct改为class
所以
struc测试 stTest=(struc测试)this.al测试[j];//这里stTest 并不是al测试[j],他们只是值相等;
//stTest.String1="晚安"; 所以这里并不是修改al测试[j].String1 而是修改stTest这个临时变量的String1
有一个解决方案就是把struct改为class
#4
修改完后,先删除原先的,再插入现在的,例如:
yourStruct objData = ( yourStruct ) yourArray[i];
// Set new value to your struct object;
// Save new object into arraylist
yourArray.RemoveAt( i );
yourArray.Insert( i, objData );
yourStruct objData = ( yourStruct ) yourArray[i];
// Set new value to your struct object;
// Save new object into arraylist
yourArray.RemoveAt( i );
yourArray.Insert( i, objData );
#5
谢谢hdt 和Knight94
我都试这些方法了呢^_^
谢谢
我都试这些方法了呢^_^
谢谢