不知道如何嘗試訪問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
靜態。不要使用這個選項。它爲併發問題打開了大門,可能泄露強引用等。一般來說,使用靜態(如單例),我會因爲這些原因而不願意傳遞數據。 Singleton模式有時間和地點,但我不認爲這是它,因爲它很容易避免。
好的,既然我們得到了不好的解決方案,讓我們看看幾個可能的好方法。
在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
的鏈接列表中。
你如何訪問其他窗口中的鏈接列表?你的LinkedList是一個實例變量。您需要將鏈接列表傳遞給新窗口(或傳遞整個窗口) - 靜態訪問它不起作用。 – vcsjones