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",求大神指教啊!
展开
 我来答
ICBC09111
2015-11-02 · 超过53用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:82.7万
展开全部
这里面有引用的概念,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";
追问
嗯,我猜想也是存的是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的值,然后你对这个代理进行增删改查。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式