C#: Будет ли Linq toList () генерировать новые элементы? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть такой список:

  List<Food> foods = new List<Food>();
  foods.add(food1);
  foods.add(food2);
  foods.add(food3);
  ....

  foodsNewList = foods.Where("some conditions").ToList();

Я хочу знать, будет ли .ToList() генерировать NEW элементов или нет? Я имею в виду, ссылка на предыдущие элементы в списке будет сохранена или нет? Например, если у меня есть

food1.Name="test";

Это приведет к обновлению еды в foodsNewList или нет?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Если в вашем случае это список классов типа «Еда», то они будут ссылками. Вы можете проверить это с помощью простого консольного приложения, например:

    static void Main(string[] args)
    {
        var foodList = new List<Food>
        {
            new Food { Id = 1, Name = "Peach" },
            new Food { Id = 2, Name = "Pear" },
            new Food { Id = 3, Name = "Apple" },
            new Food { Id = 4, Name = "Garlic" },
        };

        var message1 = "entries in foodList: ";
        var message2 = "entries in myNewFoodList: ";

        ShowEntries(message1, foodList);

        //Create new list with references
        var myNewFoodList = foodList.Where(x => x.Id > 1).ToList();

        ShowEntries(message2, myNewFoodList);

        //Update original list item that was also included in the new list
        foodList[1].Id = 7;
        foodList[1].Name = "Pineapple";

        ShowEntries(message1, foodList);
        ShowEntries(message2, myNewFoodList);

        Console.ReadLine();
    }

    public static void ShowEntries(string message, IList<Food> listOfFoods)
    {
        Console.WriteLine(message);
        foreach (var item in listOfFoods)
        {
            Console.WriteLine("Id: " + item.Id + ", Name: " + item.Name);
        }

        Console.WriteLine();
    }

    class Food
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

Результаты показывают, что обновленный элемент в исходном списке также отображается как обновленный в новом списке:

enter image description here

2 голосов
/ 15 апреля 2020

foodsNewList будет просто иметь ссылки / указатели на эти Food объекты. Изменение Food объекта «обновит» их в списке

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