Я пытаюсь создать новый список из findall или где и изменить этот новый список, не внося изменений в оригинал. При создании списка2 из FindAll и внесении изменений в список2 это не должно влиять на список1. Почему?
Изменить... Используется комбинация обоих ответов, которая, похоже, работает. Любые предвидимые проблемы??? Рабочий код отредактирован Изменить... Не работает. Класс, который является свойством объекта, не копирует свои данные... Любые идеи??? Я не понимаю, почему простое копирование или клонирование не является простым и простым для списка.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Started");
List<SampleData> list1 = SampleData.MakeList(3);
for (int i = 0; i < list1.Count; i++)
{
Console.WriteLine("list1.Number => " + list1[i].Number);
Console.WriteLine("list1.Person => " + list1[i].Person);
}
List<SampleData> list2 = new List<SampleData>(list1.FindAll(m => m.Number == 1).Select(x => new SampleData().ShallowCopy())).ToList();
for (int i = 0; i < list2.Count; i++)
{
list2[i].Person = "Person " + list2[i].Number;
Console.WriteLine("list2.Number => " + list2[i].Number);
Console.WriteLine("list2.Person => " + list2[i].Person);
}
SampleData sd = list2.Find(s => s.Number == 1);
Console.WriteLine("Apartment Number" + sd.apartment.BuildingLetter); // <<<<------------------- THROWING NULL EXCEPTION FOR APARTMENT
Console.WriteLine("-------AFTER MODIFYING NEW LIST----LIST1.Person SHOULD BE NULL---");
for (int i = 0; i < list1.Count; i++)
{
Console.WriteLine("--list1.Number => " + list1[i].Number);
Console.WriteLine("--list1.Person => " + list1[i].Person);
}
for (int i = 0; i < list2.Count; i++)
{
Console.WriteLine("--list2.Number => " + list2[i].Number);
Console.WriteLine("--list2.Person => " + list2[i].Person);
}
Console.ReadLine();
System.Environment.Exit(0);
}
}
class SampleData
{
public int Number { get; set; }
public String Person { get; set; }
public Apartment apartment { get; set; }
public static List<SampleData> MakeList(int count)
{
List<SampleData> l = new List<SampleData>();
for (int i = 0; i < count; i++)
{
SampleData d = new SampleData();
d.apartment = new Apartment { RoomNumber = i, BuildingLetter = "letter-" + i };
d.Number = i;
l.Add(d);
}
return l;
}
public SampleData ShallowCopy()
{
return (SampleData)this.MemberwiseClone();
}
}
class Apartment
{
public int RoomNumber { get; set; }
public String BuildingLetter { get; set; }
}