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

时间:2009-05-28 18:39:03

标签: .net

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

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

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

2 个答案:

答案 0 :(得分:10)

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


评论后编辑:

为了澄清使用Interlocked.Exchange如何工作,您可以这样做:

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

这与执行相同(实际上):

Swap(ref left, ref right);

但是,Interlocked.Exchange将其作为原子操作,因此它是线程安全的。

答案 1 :(得分:4)

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

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