Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Почему при использовании where результат содержит ссылку на исходный массив?

#c_sharp #linq


Допустим у меня есть массив List> first_mas, на котором я провожу выборку 

List result = new List();
result = first_mas.Where(d => d[0] == "1").First();


Если допустим я потом в result удалю несколько элементов, то и в исходном first_mas
удалятся эти элементы. Как я понимаю это из-за того что result содержит ссылку на first_mas
или дело в другом? Можно как то указать чтобы результат был самостоятельным массивом
(без ссылки на исходный)? Или только вручную создавать промежуточный и копировать туда? 
    


Ответы

Ответ 1



Where лишь фильтрует исходных список. Логично, что результат ссылается на оригинал. Можно как то указать чтобы результат был самостоятельным массивом (без ссылки на исходный)? Например, так: List result = first_mas.Where(d => d[0] == "1").First().ToList(); Или: List result = new List(first_mas.Where(d => d[0] == "1").First());

Ответ 2



Потому что List< T> - ссылочный тип, и ссылка, указывающая на result, ссылается на соответствующий элемент списка first_mas

Комментариев нет:

Отправить комментарий