Как повторно использовать список в C #? - PullRequest
0 голосов
/ 15 декабря 2018

Я объявляю List <T> и List<List<T>> перед началом цикла.затем некоторые элементы добавляются в List <T>.После условия я добавляю List <T> к List<List<T>>.На данный момент мне нужно Clear List <T>, чтобы я мог использовать его снова, но это также удаляет элементы из List<List<T>>, что я не хочу, что мне делать?

int counter;
List<List<T>> parent= new List<List<T>>();
List<T> child= new List<T>();
for (counter = 0; counter <= group.Count - 2; counter++)
{
    // some code here
    if ( /* condition */ )
    {
        child.Add(element);
        child.Add(element2);
        parent.Add(child);
        child.Clear();
    }
}

Примечание: я знаю, что одним из решений является использование new List<T>(); внутри цикла, но это не вариант для меня.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Поскольку = new List<T>() не подходит для вас, вы можете позвонить ToList() на child List при добавлении его к parent List.

parent.Add(child.ToList());

Это приведет к добавлению нового отдельного списка в parent.
. После этого можно будет очистить child List.

int counter;
List<List<T>> parent= new List<List<T>>();
List<T> child= new List<T>();
for (counter = 0; counter <= group.Count - 2; counter++)
{
    // some code here
    if (//condition)
    {
        child.Add(element);
        child.Add(element2);
        parent.Add(child.ToList());
        child.Clear();
    }
}
.
0 голосов
/ 15 декабря 2018

Вы не можете повторно использовать дочерний список.Списки являются классами и, следовательно, ссылочными типами.Это означает, что вы фактически не сохраняете сам объект дочернего списка в родительском списке, а ссылаетесь на созданный вами уникальный дочерний список.В результате все позиции списка указывают на один и тот же уникальный дочерний список.Вы должны каждый раз создавать новый дочерний список.

List<List<T>> parent = new List<List<T>>();
for (counter = 0; counter <= group.Count - 2; counter++)
{
    if (condition)
    {
        var child = new List<T>();
        child.Add(element);
        child.Add(element2);
        parent.Add(child);
    }
}

Это можно визуализировать следующим образом:

                      child list object
variable              +-----------+
+-------+             |           |
|child  o------------>|           |
+-------+             |           |
                      |           |
                      |           |
                      |           |
                      |           |
                      |           |
                      +-----------+

Результат повторного использования списка будет:

                       child list
                      +-----------+
parent list      +--->|           |
+--------+       |    |-----------|
|        |o----->|    |           |
|--------|       |    |-----------+
|        |o----->|    |           |
|--------|       |    +-----------+
|        |o----->|
|--------|       |
|        |o----->|
|--------|       |
|        |o------+
+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...