WPF中的应用程序级变量

3
我在一个窗口中有一个应用级别变量。
  object temp1 = App.Current.Properties["listofstring"];

   var temp2 = (List<string>)temp1;

当我更改时,比如说

 temp2[0]="abc";

它还改变了"listofstring"中的内容。

因此,我创建了一个副本。

List<string> temp3 = temp2;

但是如果我这样做

 temp3[0] ="abc"; 

当在其他窗口中访问时,"listofstring"中的it也会发生变化吗?

一旦声明,如何仅使用其本地副本而不影响其内容?


3
你只是复制了一个引用,而没有进行深度复制。无论如何,我的建议(这绝对不是针对这个问题的答案)是:不要使用全局变量。 :) - Patryk Ćwiek
1个回答

5

你并没有复制列表,而是复制了引用。你可以这样做:

List<string> temp3 = new List<string>(temp2.ToArray());
//or
List<string> temp3 = new List<string>(temp2);

或者

List<string> temp3 = temp2.Select(r=>r).ToList();
//or 
List<string> temp3 = temp2.ToList();

@uncia,你确定要清理并重新构建你的项目吗? - Habib
@uncia,你确定你的列表是字符串列表吗? - Habib
它是一个类对象,其中包含所有成员字符串。 - uncia
@uncia,那就不同了。你需要实现ICloneable接口(http://msdn.microsoft.com/en-us/library/system.icloneable.aspx)。 - Habib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接