gpt4 book ai didi

c# - 如何将包含所有元素的整个字符串列表添加到 C# Form Application 中的类

转载 作者:行者123 更新时间:2023-11-30 23:08:16 25 4
gpt4 key购买 nike

我有一个具有不同值的Employee Class,我从我的Main Form 调用它,我想将 list 元素添加到我的 class,但它没有像我希望的那样工作。

我的员工类如下所示:

    public class Employee
{
public Employee(int id, string name, string mobil, string email,
List<string> listAttributes)
{
Id = id;
Name = name;
Mobil = mobil;
Email = email;
ListAttributes = listAttributes;
}
public int Id { set; get; }
public string Name { set; get; }
public string Mobil { set; get; }
public string Email { set; get; }
public List<string> ListAttributes { set; get; }
}

在我的主窗体上,我有一个这样的员工列表:

    public List<Employee> WorkerDatas = new List<Employee>(); 

还有一个像这样的属性列表:

    public List<string> Attributes = new List<string>();

然后我使用“添加员工按钮”将新员工数据添加到此列表中。按钮的 On_Click 事件是这样的:

    private void btnAdd_Click(object sender, EventArgs e)
{
WorkerDatas.Add(new Employee(EmployeeIndex, txbName.Text, txbMobil.Text, txbEmail.Text, Attributes));
}

一切正常,如我所愿(ID、姓名、手机、电子邮件),但列表(属性)无法正常工作。如果我添加 1 名员工,它看起来工作正常,但当我添加第二名员工时,我的第一名员工与我的第二名员工具有相同的属性。 (我从 CheckedListBox 中选择属性,我的员工可能有也可能没有 7 个属性。)

我希望我很清楚,我找不到类似的问题和解决方案,所以我不得不问。感谢您的任何帮助! :)

最佳答案

我的通灵调试能力告诉我,您将相同的列表传递给每个 Employee构造函数,List<T>是引用类型,这意味着持有的变量只是持有指向真实列表的指针。

这样做的结果是每个员工都有完全相同的列表,当您更改它时,您会为所有员工更改它。

您应该构建一个全新的属性列表以传递给每个员工。

因为,string是不可变的并且行为与值类型基本相同,您只需要担心列表本身。添加 ToList()应该做的伎俩。 ToList()总是返回一个新列表。

WorkerDatas.Add(new Employee(EmployeeIndex, txbName.Text, txbMobil.Text, txbEmail.Text, Attributes.ToList()));

注意,如果 Attributes是一些其他非不可变引用类型的列表,您也必须制作元素的副本。

关于c# - 如何将包含所有元素的整个字符串列表添加到 C# Form Application 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46653008/

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