框架中的任何地方都存在这样的方法吗?
public static void Swap<T>(ref T left, ref T right) {
T temp;
temp = left;
left = right;
right = temp;
}
如果没有,有什么原因吗?
答案 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