Public LinkedList



我的c#代码有问题。目前,我试图用多个窗口编程Windows窗体应用程序。现在我的问题是:

在第一个窗口,我有一个组合框的一些值。当我点击一个按钮时,第二个窗口打开,它应该可以在第一个表单上向这个组合框添加一个值。

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

像这样:

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

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

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

希望你理解我的问题…

哈拉尔德

在不知道如何访问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的链表上。

您总是可以将它传递给第二个窗口。正如vcsjones在下面指出的那样,只有在重新分配列表时才需要添加ref关键字。您将需要一个以链表为变量的构造函数。

SecondWindow secondWindow = new SecondWindow(sample);

另一种方法是使用单例模式创建一个类,并在其中放置链表。然后,如果它在一个公共位置,您就可以从两个窗口访问它。

相关内容

  • 没有找到相关文章