2013-03-06 2 views
3

У меня есть переменная уровня приложения в одном окнеПрименение переменной уровня в WPF

object temp1 = App.Current.Properties["listofstring"]; 

    var temp2 = (List<string>)temp1; 

когда РМКО изменение позволяет говорить

temp2[0]="abc"; 

также изменить, что в «listofstring»

поэтому я сделал копию

List<string> temp3 = temp2; 

но если я делать

temp3[0] ="abc"; 

это изменение "listofstring" также при обращении в другом окне?

Как я могу использовать только локальную копию его не беспокоить его содержимое однажды сказал?

+3

Вы только скопировали ссылку, вы не сделали глубокую копию. Во всяком случае, моя рекомендация (которая определенно не является ответом на этот вопрос) была бы: не используйте глобальные переменные. :) –

ответ

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(); 
+0

не работает, он принимает это как refrence – uncia

+0

@uncia, вы уверены, очистите и перестройте свой проект. – Habib

+0

Да, очистить и перестроить проект – uncia

Смежные вопросы