Public LinkedList

时间:2011-09-07 14:34:16

标签: c# winforms linked-list

我的C#代码存在问题。目前我尝试使用多个Window编写Windows窗体应用程序。 现在我的问题是:

在第一个窗口,我有一个带有一些值的组合框。当我点击一个按钮时,第二个窗口打开,在那里应该可以在第一个窗体上为这个组合框添加一个值。

问题是在第一个窗口中我有一个LinkedList,我的值在哪里。

像这样:

public LinkedList<String> sample = new LinkedList<String>();


hase.AddFirst("test");
combobox.Items.AddRange(sample.ToArray());

现在,在第二个窗口中,LinkedList不可用,即使我将其公开。 解决这个问题的最佳方法是什么?

希望你理解我的问题......

哈拉尔德

2 个答案:

答案 0 :(得分:0)

您始终可以将其传递到第二个窗口。正如vcsjones在下面指出的那样,如果要重新分配列表,则只需要添加ref关键字。您将需要一个将链表作为变量的构造函数。

SecondWindow secondWindow = new SecondWindow(sample);

另一种方法是使用singleton pattern创建一个类,您可以将链接列表放在那里。如果它位于一个公共位置,您可以从两个窗口访问它。

答案 1 :(得分:0)

如果不知道如何尝试访问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的链接列表中。