创建模板双链接列表 C#

问题描述 投票:-1回答:1

我需要实现一个程序,接收各种输入数据(我在WindowsForms中做的程序,我通过button进行了类型选择),将它们添加到一个双链列表中,并对其进行排序,然后输出到listBox中),但是,当在button类中创建双链列表对象时,这个列表不能被表单类的其他方法看到。但是,当在button类中创建一个双链列表对象时,表单类中的其他方法看不到这个列表(这是符合逻辑的)。我想在表单中创建一个模板列表对象,然后在点击按钮后将其带入特定类型。有什么方法可以实现这个功能吗?目前,我能想到的就是创建各种类型的列表,最后会变成空的。而每一个列表的排序输出调用都要重写。

D_List<int> massiv1;
D_List<int> massiv2;
D_List<string> massiv3;
D_List<string> massiv4;
D_List<double> massiv5;
D_List<double> massiv6;
private void button5_Click(object sender, EventArgs e)
    {
        massiv1 = new D_List<int>();
        massiv2 = new D_List<int>();
        Gen<int>(ref massiv1, ref massiv2);
    }
//... for each list
private void button7_Click(object sender, EventArgs e)
    {
        M5<string> sort2 = new M5<string>();
        D_List<string> sortedd = new D_List<string>();
        string s;
        Optim<string>(massiv4, sort2, out sortedd, out s);

        listBox1.Items.Clear();
        utility.Vivod(ref sortedd, listBox1);

        label11.Text = s;
        label12.Text = sort2.kolvo_srav.ToString();
        label13.Text = sort2.kolvo_perest.ToString();
    }
 //... for each list
c# winforms templates linked-list
1个回答
0
投票

欢迎来到stackoverflow!

没有代码很难说,但似乎你应该利用继承来解决这个问题。多态就是为了解决这种问题而设计的。

你的数据大概有一些共同的特征(例如,要进行排序,就需要定义某种顺序)。把这些放到一个基类中,然后在每个代表数据的子类中继承这些特征。

作为一个例子。

class BaseItem: IComparable
{
   public int CompareTo (object obj);
}

class DecimalItem: BaseItem
{
   public decimal Value { get; set; }
   //override CompareTo if necessary
}

现在你不需要为每种类型的数据建立一个单独的列表 你可以建立一个BaseItems的列表 然后把任何一种类型的数据添加到这个列表中去

如果你的数据不使用子类(例如,它们是基元类型),你可能只需要做一个IComparable类型的单一列表。

© www.soinside.com 2019 - 2024. All rights reserved.