Ich versuche, eine neue Liste von findall oder wo und ändern Sie diese neue Liste, ohne dass es Änderungen am Original. Wenn list2 aus FindAll erstellt wird und eine Änderung an list2 vorgenommen wird, sollte dies list1 nicht beeinflussen. Woher?asp.net Liste von FindAll ändern oder wo ohne Änderung der ursprünglichen Liste gesucht
Edit ... Gebrauchte Kombination beider Antworten, die zu funktionieren scheint. Irgendwelche voraussichtlichen Ausgaben ??? Arbeitscode bearbeitet Bearbeiten ... Es funktioniert nicht. Für eine Klasse, die eine Eigenschaft des Objekts ist, werden keine Daten kopiert ... Irgendwelche Ideen ??? Ich kann nicht verstehen, warum Kopieren oder Klonen einfach und einfach für eine Liste ist.
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; }
}
Offenbar das funktioniert nicht, wenn es eine Zusatz-Klasse als eine der Eigenschaften ist. Bei einer Eigenschaft, die eine separate Klasse ist, werden ihre Daten nicht kopiert. Siehe bearbeiteten Code. – user2828970