代码之家  ›  专栏  ›  技术社区  ›  Bob

框架中是否有通用交换方法?

  •  14
  • Bob  · 技术社区  · 15 年前

    这种方法在框架中的任何地方都存在吗?

    public static void Swap<T>(ref T left, ref T right) {
        T temp;
        temp = left;
        left = right;
        right = temp;
    }
    

    如果没有,有什么原因吗?

    2 回复  |  直到 15 年前
        1
  •  10
  •   Reed Copsey    15 年前

    Interlocked.Exchange . 这是在线程安全的原子调用中完成的。


    评论后编辑:

    只是为了说明这是如何使用联锁交换的,您可以:

    left = Interlocked.Exchange(ref right, left);
    

    这将等同于(实际上)做:

    Swap(ref left, ref right);
    

    但是,互锁交换作为一个原子操作来完成,所以它是线程安全的。

        2
  •  4
  •   Mehrdad Afshari    15 年前

    不,框架没有这样的方法。可能是因为内置它没有什么好处,您可以很容易地(像您一样)自己添加它。这也需要使用 ref 作为参数,这将极大地限制用例。例如,您不能这样做:

    List<int> test; 
    // ...
    Swap(ref test[0], ref test[1]); // won't work, it's an indexer, not an array