Столкнулся с такой вот непонятной для себя проблемой: имеется список, дальше производятся какие-то действия, где этот список используется (скажем, просто упомянается), в результате чего этот самый главный список меняет свои значения! Как, почему это происходит и как сохранить первоначальное значение неизменным?
Вот набросал небольшой код-примерчик:
Код | using System; using System.Collections.Generic; using System.Windows.Forms; using System.Collections;
namespace Temp2 { static class Program { /// <summary> /// Главная точка входа для приложения. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1());
List<string> list1 = new List<string>() { "1", "2", "3" }; List<string> list2 = new List<string>() { "a", "b", "c", "d", "e" }; List<string> list3 = new List<string>() { "14r", "22g", "31f", "4f" }; List<IEnumerable> main_list = new List<IEnumerable>(); main_list.Add(list1); main_list.Add(list2); main_list.Add(list3);
List<IEnumerable> other_list = new List<IEnumerable>(); int[] count = new int[] { 0, 2 };// массив номеров нужных элементов списка main_list //Добавляем в other_list нужные списки из главного списка main_list: for (int j = 0; j < count.Length; j++) { other_list.Add(main_list[count[j]]); }
//Создаём список other_list_new, содержащий списки только с первыми двумя значениями: List<IEnumerable> other_list_new = new List<IEnumerable>(); foreach (List<string> item in other_list) { item.RemoveRange(2, (item.Count - 2)); other_list_new.Add(item); item.Clear();// Вот в этом месте почему-то изменяется main_list, хотя его никто не менял }
}
} }
|
http://s1.ipicture.ru/ http://s2.ipicture.ru/ http://s1.ipicture.ru/ |