C# List.Add () в методе в качестве параметра. Различные типы списков (int и string) - PullRequest
0 голосов
/ 02 апреля 2020
//Program
List<string> newList1 = new List<string>;
List<int> newList2 = new List<int>;
AddToList(newList1);
AddToList(newList2);

//Method
static void AddToList(List<object"?"> list)
{
list.Add();
}

Так как мне это сделать? Я не хочу делать два разных метода. Как это может быть в одном методе?

Хорошо, тогда. Что мне с этим делать?

    static void List_ShowInfo<T>(List<T> list)
    {
        foreach(Person i in list)
        {
            i.ShowInfo();
        }
    }

Это говорит мне, что я не могу преобразовать тип 'T' в 'Person' Person, это мой класс

        static void List_AddToList<T>(List<T> list, StreamReader file)
    {
        string s;
        while ((s = file.ReadLine()) != null)
        {
            list.Add(new List<T>(s)); <---------------
        }
    }

, это говорит мне , что я не могу преобразовать строку в int в "s", я не сделал бы сообщение, если я найду что-то в Google. Но я ничего не нашел

1 Ответ

1 голос
/ 02 апреля 2020

Определите AddToList как обобщенный c метод:

static void AddToList<T>(List<T> list) 
{
}

Теперь вы можете вызывать метод с аргументом типа:

List<int> list = new List<int>();
AddToList<int>(list);

Но поскольку в большинстве случаев Компилятор достаточно умен, чтобы определить тип T, вы можете опустить аргумент типа и просто вызвать

AddToList(list);

Редактировать: Ответы на следующие вопросы:

Для перебора списка используйте T в качестве типа, как если бы вы использовали не-обобщенные c типы.

static void List_ShowInfo<T>(List<T> list)
{
    foreach (T item in list) // list is List<T>, so all items are of type T
    {
       // Do something with item
    }
}

В вашем примере:

static void List_AddToList<T>(List<T> list, StreamReader file)
{
    string s;
    while ((s = file.ReadLine()) != null)
    {
        list.Add(new List<T>(s)); <---------------
    }
}

Вы неправильно строите свой список: 1. Вы здесь используется string, но list принимает int: взгляните на конструкторы 2. Если вы хотите добавить строки в список, вы, вероятно, захотите использовать List<string> вместо List<T>.

Также обратите внимание на раздел Genercis в C# Руководство по программированию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...