Создание списка шаблонов C# - PullRequest
0 голосов
/ 27 апреля 2020
public static void GenerateRandomd<T>(D_List<T> list, int size, Random rand)
    {
        if (list is D_List<int>)
        {
            for (int i = 0; i < size; i++)
                list.Push_Back(rand.Next(0, 10000));
        }
        else if (list is D_List<string>)
        {
            for (int i = 0; i < size; i++)
                list.Push_Back(Gen_rand_string(rand));
        }
        else
        {
            for (int i = 0; i < size; i++)
                list.Push_Back(rand.NextDouble());
        }
    }  

Привет! Возможно ли реализовать что-то подобное? Заранее спасибо.

1 Ответ

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

Вам просто нужно привести list переменную с сопоставлением с шаблоном :

public static void GenerateRandomd<T>(D_List<T> list, int size, Random rand)
{
    switch (list)
    {
        case D_List<int> il:
            for (int i = 0; i < size; i++)
                il.Push_Back(rand.Next(0, 10000));
            break;
        case D_List<string> sl:
            for (int i = 0; i < size; i++)
                sl.Push_Back(Gen_rand_string(rand));
            break;
        default:
            for (int i = 0; i < size; i++)
                (list as D_List<double>).Push_Back(rand.NextDouble());
    }
}

Или вы можете привести ее непосредственно в своем коде:

public static void GenerateRandomd<T>(D_List<T> list, int size, Random rand)
{
    if (list is D_List<int>)
    {
        for (int i = 0; i < size; i++)
            (list as DList<int>).Push_Back(rand.Next(0, 10000)); // cast variable to the DList<int> at each step of the cyclecast
    }
    else if (list is D_List<string>)
    {
        for (int i = 0; i < size; i++)
            (list is D_List<string>).Push_Back(Gen_rand_string(rand));
    }
    else
    {
        for (int i = 0; i < size; i++)
            (list is D_List<double>).Push_Back(rand.NextDouble());
    }
}  

Если сценарий по умолчанию подразумевает другой тип, поэтому вы можете реализовать не * generi c Push_Back(double value) метод для D_List.

...