Создание шаблона двусвязного списка C# - PullRequest
0 голосов
/ 26 апреля 2020

Мне нужно реализовать программу, которая получает различные входные данные (я делаю программу в WindowsForms, я сделал выбор типа с помощью кнопки), добавляю их в двойной связанный список, сортирует и выводит его в listBox). Однако при создании объекта двойного связного списка в классе кнопки этот список не виден другим методам из класса формы (это логично). Я хотел бы создать объект списка шаблонов в форме и затем привести его к указанному типу c после нажатия кнопки. Есть ли способ реализовать это? Пока все, о чем я могу думать, - это создавать списки различных типов, которые в конечном итоге будут пустыми. И вызов сортировки / вывода должен быть переписан для каждого списка.

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

1 Ответ

0 голосов
/ 26 апреля 2020

Добро пожаловать в stackoverflow!

Трудно сказать без кода, но кажется, что для этого нужно использовать наследование. Полиморфизм предназначен для решения такого рода проблем.

Возможно, ваши данные имеют некоторые общие черты (например, для сортировки потребуется определенный порядок определения). Поместите их в базовый класс и унаследуйте, что в каждом из подклассов шляпа представляет данные.

В качестве примера:

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

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

Теперь вместо создания отдельного списка для каждого типа данных, вы бы составили один список BaseItems и добавили бы тот тип данных, который на самом деле относится к этому списку.

Если вы не используете подклассы для своих данных (например, они являются примитивными типами), вы, вероятно, могли бы просто сделать свой единственный список типов IComparable.

...