AddRange () не работает при добавлении элементов списка в коллекцию

W3C исключил такой селектор из-за огромного влияния производительности на браузер.

-2
задан Peter Duniho 28 March 2019 в 04:57
поделиться

2 ответа

ToList() возвращает новый экземпляр, поэтому вы не можете увидеть результат AddRange в «gc». Если вы действительно хотите использовать AddRange, вы можете сделать следующее.

((List<GenericClass>)gc).AddRange(sampleList);
0
ответ дан Anu Viswan 28 March 2019 в 04:57
поделиться

Метод AddRange() работает нормально. Проблема в том, что вы не читали документацию по методу расширения ToList() внимательно, и поэтому не понимаете, что метод ToList() возвращает совершенно новый объект .

Из документации :

Создает список < T> из IEnumerable < T>.

Поскольку объект, с которым вы вызываете AddRange(), на самом деле не является исходной коллекцией, исходная коллекция остается неизменной.

В некотором смысле, ваш вопрос List<T> эквивалентен очень распространенному вопросу «почему string.Replace() не работает?»

В приведенном вами примере, на самом деле не намного лучше решение, чем просто не скрывая List<T> в первую очередь. Вы можете, поскольку вы используете общий интерфейс ICollection<T>, написать свой собственный AddRange() в качестве метода расширения:

public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> range)
{
    foreach (T t in range)
    {
        collection.Add(t);
    }
}

Но я не уверен, что это действительно намного лучше, чем просто оставить введите как List<T>, если цель состоит в том, чтобы иметь возможность изменять объект и использовать метод AddRange().

Бросить ссылку ICollection<T> обратно к ее основному List<T> (как предлагает другой ответчик) бессмысленно, так как это сведет на нет любое значение при использовании интерфейса ICollection<T> в первую очередь.

Просто оставьте ссылку как List<T>, по крайней мере, в любом контексте, где вам действительно нужно изменить коллекцию. (Хорошо, и даже, возможно, полезно, раскрыть этот список в других контекстах, используя только ICollection<T>, но это совершенно другое обсуждение.)

Пока я отвечаю, я буду упоминать, что я Скептически относимся к тому, что вы правильно поняли цель предупреждения FxCop, поскольку раскрытие общих списков само по себе не является вредным.

0
ответ дан Peter Duniho 28 March 2019 в 04:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: