C#将数组放入队列,再修改数组值,队列里面的值也跟着修改了,怎么解决??
Queue<string[]>qlist=newQueue<string[]>();string[]test1={"4","8","f","d","f","s"};qli...
Queue<string[]> qlist = new Queue<string[]>();
string[] test1 = { "4", "8", "f", "d", "f", "s"};
qlist.Enqueue(test1);
test1[0]="abc";
以上代码的结果,队列里面的值为"abc","8", "f", "d", "f", "s",我希望最后一行代码不修改队列里面的内容,仍然为"4", "8", "f", "d", "f", "s",求大神指教啊! 展开
string[] test1 = { "4", "8", "f", "d", "f", "s"};
qlist.Enqueue(test1);
test1[0]="abc";
以上代码的结果,队列里面的值为"abc","8", "f", "d", "f", "s",我希望最后一行代码不修改队列里面的内容,仍然为"4", "8", "f", "d", "f", "s",求大神指教啊! 展开
展开全部
这里面有引用的概念,qlist.Enqueue(test1); 存的可能就是 test1在内存中的地址,这个地址指向的就是数组里面的元素,test1[0]="abc"; 这句改的是数组里面元素的值,但是test1这个对象在内存中的地址本身没有变。所以会出现这样的现象
最直接的办法
Queue<string[]> qlist = new Queue<string[]>();
string[] test1 = { "4", "8", "f", "d", "f", "s"};
string[] test2 = { "4", "8", "f", "d", "f", "s"};
qlist.Enqueue(test2);
test1[0]="abc";
最直接的办法
Queue<string[]> qlist = new Queue<string[]>();
string[] test1 = { "4", "8", "f", "d", "f", "s"};
string[] test2 = { "4", "8", "f", "d", "f", "s"};
qlist.Enqueue(test2);
test1[0]="abc";
追问
嗯,我猜想也是存的是test1的地址,所以才有现在的问题,你给的方法我也知道肯定可以,关键是test1是还会变化的,也还会加入队列,也就是说我要将test1不断的加入队列,它的值以改变我就加入队列。我就想说有没有办法是存入的值而不是地址?
追答
可以 原来你test1是后面不断的改变 不断的存啊,开发中有个代理模式,你用这个正好
Queue qlist = new Queue();
string[] test1 = { "4", "8", "f", "d", "f", "s"};
map的key就是test1的下表 value就是test1下标的值
Map map = new HashMap();
qlist.Enqueue(test2);
以后有改变你先改变map的对应的值
然后嘛你在把map的值更新到test1中。你也可以用list等等 就是一个意思使用代理,首先让这个代理等于你的test1的值,然后你对这个代理进行增删改查。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询