скопировать элемент коллекции по значению в C # - PullRequest
2 голосов
/ 02 августа 2011

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

 imgList.Items.Add(imgList.Items[0]);

    imgList.Items[imgIndex].Data = input; <== **This updates the 0th and the newly added element which is the issues**

Пожалуйста, сообщите

1 Ответ

2 голосов
/ 02 августа 2011

Чтобы избежать этой проблемы, вам необходимо клонировать imgList.Items[0] перед добавлением его в imgList.Items.Это в основном включает создание нового объекта того же типа и заполнение его данными из оригинала.

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

Редактировать: Я забыл, что .MemberwiseClone был защищен.

Вы не говорите в своем коде, какой тип объекта вы добавляете в список.Если это ваш класс, вы можете добавить метод для возврата копии:

public MyType ShallowCopy()
{
    return (MyType)this.MemberwiseClone();
}

и использовать

imgList.Items.Add(imgList.Items[0].ShallowCopy());

Или вы можете добавить конструктор копирования:

public MyType(MyType original)
{
    // Copy each of the properties from original
    this.Data = original.Data;
}

и используйте

imgList.Items.Add(new MyType(imgList.Items[0]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...