Изменение переменной меняет также другую переменную.Запретить переменные, имеющие одинаковые ссылки - PullRequest
1 голос
/ 24 мая 2011

У меня есть класс, которому конструктор требует класс и другие вещи, такие как:

public class SomeClass<T>
{
    //global private variables for class
    List<T> originalList = new List<T>;
    List<T> tempList = new List<T>;

    public SomClass(List<T> listParam, string name, ..etc)
    {
        originalList = listParam;
        tempList = listParam;

        originalList.removeAt(0);  // this also removes an item from tempList.


    }
}

Я знаю, что это потому, что originalList и tempList имеют одинаковые ссылки. Как я мог сделать их иметь разные ссылки. Я использую tempList для фильтрации результатов и всякий раз, когда я хочу обновить, я использую originalList

Ответы [ 2 ]

5 голосов
/ 24 мая 2011

Вы можете сделать копию listParam, вместо того, чтобы просто назначить ее ссылку:

tempList = listParam.ToList();

Обратите внимание, что не создает копию каждого объекта в списке,но только копия ссылок на эти объекты.

1 голос
/ 24 мая 2011

Вместо принятия List<T> принимайте IEnumerable<T>. Если вы хотите получить конкретный список, позвоните по номеру .ToList().

Исходный источник не затронут, и у вас есть копия. Вы также можете использовать все, что поддерживает интерфейс.

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

...