C# Удалить элемент в копии List, не изменяя оригинальный List

подскажите, пожалуйста, как я могу удалить элемент в List#2, который копирую с List#1, но чтобы List№1 не изменялся? Моя задача, удалить один элемент из списка. Для этого я делаю копию оригинального, и удаляю в копии, чтобы в следующий раз все элементы снова были целы. Но каждый раз, в оригинальном списке стает на один элемент меньше, почему так?

// List allelements {"Alina","Marina","Artem","Anton")


public async Task giver(name, List<string> allelements)
    {
        var copylist = allelements;
        copylist.Remove(name);
        var k = copylist.OrderBy(x => rnd.Next()).Take(2);
        string b = "";
        foreach (string str in copylist)
        {
            b += str + " ";
        }
        // После этого в каждом следующем вызове в allelements удаляется элемент name. 
        // Почему удаление не производится только в copylist?
    }


await giver(name, allelements);

Ответы (1 шт):

Автор решения: aa_talanin

Вы делаете не копию списка, а копию ссылки на все тот же лист. Создать новый можно, например, так:

var copylist = new List<string>(allelements);

Почитайте про разницу между типами значений и ссылочными типами. У них несколько разный смысл у оператора присваивания.

→ Ссылка