请教一个ArrayList的问题?

HeartEasy 2008-12-16 11:00:45
 static ArrayList pArray = new ArrayList();
static void Main(string[] args)
{
pArray.Add("aaaa");
pArray.Add("bbbb");
pArray.Add("cccc");
pArray.Add("dddd");
testRefuse t = new testRefuse();




}
public class testRefuse
{
private ArrayList arrList = new ArrayList();
public testRefuse()
{
arrList = pArray;
arrList.Add("eeee");
arrList.Add("ffff");
Console.WriteLine("arrlist中的元素有:");
for (int i = 0; i < arrList.Count;i++ )
{
Console.WriteLine("arrList[{0}]={1}",i,arrList[i]);
}
Console.WriteLine("pArray中的元素有:");
for (int i = 0; i < pArray.Count; i++)
{
Console.WriteLine("pArray[{0}]={1}", i, pArray[i]);
}
}

}

输出的结果是两个数组中的内容是相同的,如果我是想保持pArray中的内容不变,仅想在arrList中增加两个元素,应该如何处理?
...全文
165 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chun10hui10 2009-02-13
  • 打赏
  • 举报
回复
这样就是改变arrList中的值,而不是改变pArray中的值
chun10hui10 2009-02-13
  • 打赏
  • 举报
回复
static ArrayList pArray = new ArrayList();

static void Main(string[] args)
{


Edge e = new Edge();
e.From = "a";
e.ID = "1";
e.TO = "b";
pArray.Add(e);
testRefuse t = new testRefuse(pArray);

}
}

public class testRefuse
{

private ArrayList arrList = new ArrayList();
public testRefuse(ArrayList list)
{

Console.WriteLine("pArray中的元素有:");

foreach (Edge tem in list)
{

Console.WriteLine("ID={0},From={1},To={2}", tem.ID, tem.From, tem.TO);
}
arrList.AddRange(list);
((Edge)arrList[0]).From = "c";
Console.WriteLine("arrlist中的元素有:");
foreach(Edge tem in arrList)
{

Console.WriteLine("ID={0},From={1},To={2}",tem.ID,tem.From,tem.TO);
}
}

}
public class Edge
{
public string ID;
public string From;
public string TO;

}
HeartEasy 2008-12-16
  • 打赏
  • 举报
回复
static ArrayList pArray = new ArrayList();
static void Main(string[] args)
{

Edge e = new Edge();
e.From = "a";
e.ID = "1";
e.TO = "b";
pArray.Add(e);
testRefuse t = new testRefuse();

}
public class testRefuse
{
private ArrayList arrList = new ArrayList();
public testRefuse()
{
arrList.AddRange(pArray);
((Edge)arrList[0]).From = "c";
Console.WriteLine("arrlist中的元素有:");
foreach(Edge tem in arrList)
{

Console.WriteLine("ID={0},From={1},To={2}",tem.ID,tem.From,tem.TO);
}
Console.WriteLine("pArray中的元素有:");
foreach (Edge tem in pArray)
{

Console.WriteLine("ID={0},From={1},To={2}", tem.ID, tem.From, tem.TO);
}

}

}
public class Edge
{
public string ID;
public string From;
public string TO;

}

要是这种情况又应该如何处理呢,我只是想改变arrList中的值,而不想改变pArray中的值。。
wackyboy 2008-12-16
  • 打赏
  • 举报
回复
引用类型 两个变量指向的内存地址是同一个 所以修改的也是同一个对象方法如下
1.arrList = (ArrayList)pArray.Clone();
2.arrList.AddRange(pArray);
happychou 2008-12-16
  • 打赏
  • 举报
回复
public testRefuse()
{

Console.WriteLine("pArray中的元素有:");
for (int i = 0; i < pArray.Count; i++)
{
Console.WriteLine("pArray[{0}]={1}", i, pArray[i]);
}

ArrayList arrList = new ArrayList();
arrList = pArray;
arrList.Add("eeee");
arrList.Add("ffff");
Console.WriteLine("arrlist中的元素有:");
for (int i = 0; i < arrList.Count;i++ )
{
Console.WriteLine("arrList[{0}]={1}",i,arrList[i]);
}
}
一游 2008-12-16
  • 打赏
  • 举报
回复
arrList =(arraylist) pArray.clone();

用这个方法就可以了
Aden 2008-12-16
  • 打赏
  • 举报
回复
arrList = (ArrayList)pArray.Clone();
heyu1000 2008-12-16
  • 打赏
  • 举报
回复
arrList = pArray.Clone();
sprc_lcl 2008-12-16
  • 打赏
  • 举报
回复
arrList = pArray;
替换成arrList.AddRange(pArray);
MicroDeviser 2008-12-16
  • 打赏
  • 举报
回复
引用类型当然一样啊
sprc_lcl 2008-12-16
  • 打赏
  • 举报
回复
arrList.AddRange(pArray);
HeartEasy 2008-12-16
  • 打赏
  • 举报
回复
既pArray中的元素为“aaaa”"bbbb""cccc""dddd",而arrList中为“aaaa”"bbbb""cccc""dddd"“eeee”"ffff".不知应如何编写程序。请指教?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧