我需要实现一个程序,接收各种输入数据(我在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
欢迎来到stackoverflow!
没有代码很难说,但似乎你应该利用继承来解决这个问题。多态就是为了解决这种问题而设计的。
你的数据大概有一些共同的特征(例如,要进行排序,就需要定义某种顺序)。把这些放到一个基类中,然后在每个代表数据的子类中继承这些特征。
作为一个例子。
class BaseItem: IComparable
{
public int CompareTo (object obj);
}
class DecimalItem: BaseItem
{
public decimal Value { get; set; }
//override CompareTo if necessary
}
现在你不需要为每种类型的数据建立一个单独的列表 你可以建立一个BaseItems的列表 然后把任何一种类型的数据添加到这个列表中去
如果你的数据不使用子类(例如,它们是基元类型),你可能只需要做一个IComparable类型的单一列表。