如果不确切知道如何尝试访问 LinkedList,很难说它为什么不适合您。
让我们来看看你有什么。您有一个 LinkedList,它是表单上的一个实例变量。由于这个 LinkedList 是一个实例变量,所以它与表单的实例相关联。
下面的这个例子,将不工作,因为它试图静态访问它:
public class MyForm : Form
{
public LinkedList<string> _list = new LinkedList<string>();
}
public class MySecondForm : Form
{
public void Window_Loaded(object sender, EventArgs e)
{
MyForm._list.AddFirst("This doesn't work");
//WRONG! list is an instance variable we are trying to access statically.
}
}
所以,我们可以看到这不起作用。我们有几个选项可以让这个工作。首先,一个非常糟糕的解决方案是让list 成为静态。不要使用此选项。它为并发问题打开了大门,可能会泄漏强引用等。通常,由于这些原因,我不鼓励使用静态(如单例)传递数据。单例模式有时间和地点,但我不认为是这样,因为它很容易避免。
好的,既然我们已经解决了不好的解决方案,那么让我们看看一些可能的好解决方案。
在MySecondForm 上设置列表。你有几个选择。构造函数、属性或方法。例如:
public class MyForm : Form
{
private LinkedList<string> _list = new LinkedList<string>();
public void Button1_Click(object sender, EventArgs e)
{
var secondForm = new MySecondForm();
secondForm.SetList(_list);
secondForm.ShowDialog();
MessageBox.Show(_list.First.Value);
}
}
public class MySecondForm : Form
{
private LinkedList<string> _list;
public void Window_Loaded(object sender, EventArgs e)
{
this._list.AddFirst("This will work");
}
public void SetList(LinkedList<string> list)
{
_list = list;
}
}
这是一种可能的解决方案。构造函数是Billy 建议的另一种可能的解决方案。
因为LinkedList 是一个引用类型,所以你对MySecondForm 的实例所做的任何更改都会反映在MyForm 的链表中。