Объект все еще связан (на него ссылаются) после выбора его из списка? - PullRequest
2 голосов
/ 18 мая 2010

Мне было интересно, и я не совсем уверен, но помогите мне здесь.

Если у вас есть элементы списка, и есть один объект, вам нужно изменить его свойство. Скажем, у myClass есть строковое свойство "status". Я ищу свой список с помощью цикла for, и я получаю свой объект, поэтому я делаю

myClass item = items[i];

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

item.Status = "new status";

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

items[i] = item;

Надеюсь, это понятно.

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 18 мая 2010

И список, и переменная item имеют ссылки на фактический объект. Любые изменения, которые вы вносите в объект, видны через любую ссылку.

Другими словами ... предположим, что вы просматриваете телефонную книгу и выбираете конкретный адрес. Вы копируете адрес на листе бумаги, а затем едете туда. Вы тогда красите дом красным. Теперь любой, кто найдет тот же адрес в телефонной книге и пойдет туда, все равно увидит красный дом, даже если он не видел ваш лист бумаги.

Взгляните на мою статью о типах значений и ссылочных типах , чтобы получить немного больше информации.

(Кстати, все это предполагает, что myClass действительно класс).

2 голосов
/ 18 мая 2010

Да, если myClass - это класс, как следует из названия (а не структура), это ссылочный тип .Поэтому он не копируется, когда вы пишете myClass item = items[i];.item - это просто ссылка на тот же объект, на который ссылается items[i].

2 голосов
/ 18 мая 2010

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

0 голосов
/ 18 мая 2010

Код item.Status = "new status"; изменит элемент списка

items[i] указывает на объект myClass.

Когда вы говорите myClass item = items[i];, на него ссылаются как item, так и items[i].

поэтому, когда вы изменяете одно из свойств, подобных этому item.Status = "new status";, вы фактически вносите изменения в свой объект myClass, который теперь имеет два имени item и items[i].

Вы также можете использовать item[i].Status = "new status";. Оба выполняют одну и ту же работу.

Настройка items[i] = item; не имеет никакого эффекта, так как оба уже ссылаются на один и тот же объект.

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