Захваченная переменная в функции C # с параметром List <> - PullRequest
0 голосов
/ 29 июня 2010

У меня есть следующие примеры кодов.Мне не нравится, когда lTest перехватывается и получает то же значение, что и lRet.Я попытался ввести "List<Test> lTest1 = lTest0;" в функцию AddMore2Test.Это не работает.Как правильно это сделать?

Спасибо!

Коды -

private void Test(){
  List<Test> lTest = GetInitTestList();

  List<Test> lRet = AddMore2Test(lTest);
}

private List<Test> AddMore2Test (List<Test> lTest0) {
  List<Test> lTest1 = lTest0;

  return lTest1.Where(…);
}

Ответы [ 2 ]

3 голосов
/ 29 июня 2010

Итак, в конце всего этого вы хотите, чтобы lTest содержал начальный набор значений, а lRet содержал эти начальные значения, но с небольшой долей фильтрации? Проблема в том, что вы имеете дело со ссылками, поэтому в конечном итоге все указывает на один и тот же список. Быстрое, простое решение - просто сделать это:

List<Test> lRet = AddMore2Test(lTest.ToList());

2 голосов
/ 29 июня 2010

Я думаю, вы, вероятно, захотите использовать метод List class ' AddRange (IEnumerable list) в lRet вместо присвоения значения:

lRet.AddRange(AddMore2Test(lTest))

РЕДАКТИРОВАТЬ: в комментариях было отмечено, что lRet еще не был инициализирован, так что вот жизнеспособное изменение:

var lRet = new List<Test>(AddMore2Test(lTest));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...