当它们位于两个不同的列表上时交换两个对象

时间:2016-07-28 13:07:00

标签: c#

在我的例子中,我有8个物体。

假设BlueList的第一个元素是指Element1,RedList1的第一个元素也是指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#中是否可行?

3 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:0)

我想您还需要更改RedList1和RedList2

中的引用
RedList1[0] = Element3;
RedList2[0] = ELement1;

答案 2 :(得分:-1)

  

因为您更改的值不是引用,因为列表是引用   类型,所以你需要更改引用,所以创建一个方法,如   循环并调用该方法并传递您的值。

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

希望它对您有所帮助