Подтвердить что ты не робот

Передача общего списка <> в С#

Я собираюсь умереть на этом; У меня есть определенный список, основанный на определенных классах (c1, c2, c3...). У меня есть метод, который будет обрабатывать информацию в этих списках. То, что я хочу сделать, - это передать конкретный список, но метод должен принять общий список, а затем через typeof определить, какую конкретную работу нужно выполнить. Я знаю, что это возможно, но я не могу заставить синтаксис правильно на стороне метода. так, например:

List<c1> c1var;
List<c2> c2var;
List<c3> c3var;

some_method(c1var);
some_method(c2var);
some_method(c3var);

class some_thing
some_method(List<> somevar)
if typeof(somevar).name = x then
esle if typeof(somevar).name = y then....

Как настроить список параметров для метода?

спасибо заранее Р. Сандерс

4b9b3361

Ответ 1

Вам нужно объявить some_method как общий.

void SomeMethod<T>(List<T> someList)
{
    if (typeof(T) == typeof(c1))
    {
         // etc
    }
}

Ответ 2

Осторожно с использованием typeof (typ1) == typeof (typ2). Это проверит, будут ли типы эквивалентны без учета иерархии типов.

Например:

typeof(MemoryStream) == typeof(Stream); // evaluates to false
new MemoryStream() is Stream; //evalutes to true

Лучший способ проверить, является ли объект типом, использовать ключевое слово 'is'. Ниже приведен пример:

public static void RunSnippet()
{
    List<c1> m1 = new List<c1>();
    List<c2> m2 = new List<c2>();
    List<c3> m3 = new List<c3>();

    MyMeth(m1);
    MyMeth(m2);
    MyMeth(m3);
}

public static void MyMeth<T>(List<T> a)
{
    if (a is List<c1>)
    {
        WL("c1");
    }
    else if (a is List<c2>)
    {
        WL("c2");
    }
    else if (a is List<c3>)
    {
        WL("c3");
    }
}   

Ответ 3

в разделе параметров put List, затем попробуйте в коде switch(typeof(T){case typeof(int): break;})