尝试更新列表,所有先前的值被覆盖,不使用任何类型的循环



我得到一个问题,我的列表被覆盖时,试图更新它。我确实找到了很多关于这方面的参考资料,但仍然不能应用到我的案例中。

大多数建议将变量的声明移动到循环中,但是我在这个阶段没有使用任何循环。

有一个基于名为Persons的接口的类。我想创建一个新的人当点击"添加"按钮时,人名取自文本框。

接口及其类:

interface IPerson
{
//int getId();
String GetFirstName();
//String getLastName();
//DateTime getDateOfBirth();
//int getHeight();
}

public class Person: IPerson
{
//public double MaximumValue;
public string GetFirstName()
{
return Form1.newName;
}
}

按钮,点击:

private void btnAdd_Click(object sender, EventArgs e)
{
newName = txtName.Text;
//Person newPerson = new Person();
//newPerson.GetFirstName();
PersonCollection.ThisPersonCollection.Add();
}

形式加载:

private void Form1_Load(object sender, EventArgs e)
{
PersonCollection.ThisPersonCollection = new PersonCollection();
PersonCollection.ThisPersonCollection.Create();
}

Person集合类:

class PersonCollection
{
public static PersonCollection ThisPersonCollection;
private static object _lock = new object();
public static List<Person> _persons;
public static List<Subscriber> _subscribers;
private static System.Timers.Timer _timer = new Timer();
}

在PersonCollection类中添加方法

public void Add()
{
lock (_lock)
{
Person newPerson = new Person();
newPerson.GetFirstName();
_persons.Add(newPerson);
}
}

我试着玩静态非静态所有变量和类,我试着创建一个

newPerson = new Person();

在按钮单击方法中,在类的添加方法中,我尝试首先添加新的Person,然后更改它的值,我尝试创建一个Person作为方法:

public Person NewPerson()
{
Person newPerson = new Person();
newPerson.GetFirstName();
return newPerson;
}

但这两种方法都没有任何作用。从我所读到的,我确实理解,当试图添加一个新的人,而不是我覆盖所有现有的,因为所有的列表对象使用相同的引用。但我不知道如何解决这个问题。

请帮忙,

Evgenie

人物类别:

public interface IPerson
{
public string FirstName { get; set; }
}
public class Person : IPerson
{
public string FirstName { get; set; }
}

表单绑定:

public BindingList<Person> Persons { get; private set; } = new();
public Form1()
{
InitializeComponent();
listBox1.DataSource = Persons;
listBox1.DisplayMember = "FirstName";
}
private void button1_Click(object sender, EventArgs e)
{
Persons.Add(new Person { FirstName = textBox1.Text });
}
private void button2_Click(object sender, EventArgs e)
{
if (Persons.Count > 0)
Persons.RemoveAt(Persons.Count - 1);
}

别把脑子卡住了。

最新更新