繁体   English   中英

创建模板双链表 C#

[英]Creating a template double-linked list C#

我需要实现一个接收各种输入数据的程序(我在 WindowsForms 中执行程序,我通过按钮进行了类型选择),将它们添加到双链表中,对其进行排序并将其输出到 listBox)。 但是,在按钮 class 中创建双向链表 object 时,从 class 的形式中,其他方法看不到此列表。(这是合乎逻辑的)。 我想在表单中创建一个模板列表 object,然后单击按钮后将其转换为特定类型。 有什么方法可以实现吗? 目前,我能想到的只是创建最终会为空的各种类型的列表。 并且必须为每个列表重写排序/输出调用。

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

欢迎来到堆栈溢出!

没有代码很难说,但您似乎应该为此使用 inheritance 。 多态性就是为了解决这类问题而设计的。

您的数据可能共享一些特征(例如,要对其进行排序,需要定义某种顺序)。 将这些放入基础 class 并在每个子类中继承它代表数据。

举个例子:

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

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

现在,您无需为每种类型的数据创建一个单独的列表,而是创建一个 BaseItem 列表并将数据实际属于的任何类型添加到此列表中。

如果您没有为您的数据使用子类(例如,它们是原始类型),您可能只需要创建一个 IComparable 类型的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM