gpt4 book ai didi

c# - 将项目列表复制到另一个列表

转载 作者:行者123 更新时间:2023-12-02 00:52:15 25 4
gpt4 key购买 nike

我正在尝试将项目列表从 list1 复制到另一个列表 list2。我有能力做到这一点。但是我不希望 list2 中所做的更改反射(reflect)在 list1 中。

class Program
{
static void Main(string[] args)
{
List<MyClass> list1 = new List<MyClass>();
list1.Add(new MyClass(){ID = 1, Name = "name1"});
list1.Add(new MyClass(){ID = 2, Name = "name2"});
list1.Add(new MyClass(){ID = 3, Name = "name3"});

//Copy items from list1 to list2
List<MyClass> list2 = new List<MyClass>(list1);

list1.ForEach(x => Console.WriteLine(x.Name)); //It shows the name as added

//Empty items in list2
list2.ForEach(x => x.Name = string.Empty);

//Print items in list1
list1.ForEach(x => Console.WriteLine(x.Name)); //It shows the name is empty
Console.ReadKey();
}
}

class MyClass
{
private int id;

public int ID
{
get { return id; }
set { id = value; }
}

private string name;

public string Name
{
get { return name; }
set { name = value; }
}
}

我希望应该有一个简单的方法。

最佳答案

由于这是一个引用类型,因此您将更改所有内容。您需要创建该实例的副本:

public class MyClass 
{
private int id;

public int ID
{
get { return id; }
set { id = value; }
}

private string name;

public string Name
{
get { return name; }
set { name = value; }
}

public MyClass Copy()
{
return new MyClass
{
ID = this.ID,
Name = this.Name
};
}
}

现在您可以通过以下方式创建第二个列表:

List<MyClass> list2 = new List<MyClass>(list1.Select(x => x.Copy()));

当然你不需要那个方法。您也可以在 LINQ 查询中即时执行此操作:

List<MyClass> list2 = new List<MyClass>(list1.Select(x => new MyClass { ID = x.ID, Name = x.Name }));
<小时/>

另一种类似的方法是 copy-constructor 。复制构造函数用于通过提供相同类型的另一个实例来初始化实例:

public class MyClass
{
private int id;

public MyClass(MyClass instance)
{
this.id = instance.ID;
this.name = instance.Name;
}

public int ID
{
get { return id; }
set { id = value; }
}

private string name;

public string Name
{
get { return name; }
set { name = value; }
}
}

现在您可以用以下方式填充列表:

List<MyClass> list2 = new List<MyClass>(list1.Select(x => new MyClass(x)));

或使用List.ConvertAll:

List<MyClass> list2 = list1.ConvertAll(x => new MyClass(x));

关于c# - 将项目列表复制到另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33167291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com