【问题标题】:Creating a template double-linked list C#创建模板双链表 C#
【发布时间】:2020-04-26 12:30:56
【问题描述】:

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

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】:

欢迎使用 stackoverflow!

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

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

举个例子:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多