2016-07-28 2 views
1

В моем примере я получил 8 объектов.Обмен двумя объектами, когда они находятся в двух разных списках

Предположит, что первый элемент BlueList есть ссылка на element1 и первый элемент RedList1 также refered к element1

enter image description here

Теперь я хочу поменять Object1 с Object3, но когда я делаю что-то вроде этого:

Псевдо Код:

Object Temp = BlueList1[0]; 
BlueList1[0] = BlueList[1]; 
BlueList1[1] = Temp; 

результат:

enter image description here

Потому что я только переключал список референций. Как безопасно заменить два адреса объекта, как на картинке ниже? Как видите, элемент Element1 переключается с помощью Element3.

enter image description here

Это может быть сделано в Ис C++. Возможно ли это на C#?

+0

, потому что изменение значения не ссылаться на список ссылочный тип. –

+0

Я думаю, вам нужно показать больше кода, чтобы понять, относятся ли элементы к другим элементам или только списки относятся к элементам. Я не понимаю, как красный список относится к Элементу 1 и Элементу 2 одновременно. Кроме того, это все тот же тип или нет. – ja72

ответ

0

Я полагаю, вы должны также изменить ссылку в RedList1 и RedList2

RedList1[0] = Element3; 
RedList2[0] = ELement1; 
-1

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

void swap(int ref a , int ref b) 
    { 
    int temp =a; 
     a=b; 
     b =temp; 
    } 

Надеется, что это будет полезно для Вас поблагодарили

+0

Вы цитируете кого-то еще? Почему вы используете _blockquotes_ в своем сообщении? – ja72

2

Я думаю, что вам нужно сделать класс-обертки.

class Element<T> { 
    public T Object { get; set; } 
    public void SwapWith(Element<T> other) { 
     // warning: this is not thread-safe 
     T tmp = other.Object; 
     other.Object = this.Object; 
     this.Object = tmp; 
    } 
} 

Затем вы можете внести изменения, как

BlueList1[0].SwapWith(BlueList[1]); 
Смежные вопросы