Dot-Net
框架中是否有通用的交換方法?
框架中的任何地方都存在這樣的方法嗎?
public static void Swap<T>(ref T left, ref T right) { T temp; temp = left; left = right; right = temp; }如果不是,有什麼理由嗎?
有Interlocked.Exchange。這是線上程安全的原子呼叫中完成的。
評論後編輯:
只是為了闡明使用 Interlocked.Exchange 的工作原理,您可以:
left = Interlocked.Exchange(ref right, left);這將等效於(實際上)執行以下操作:
Swap(ref left, ref right);但是,Interlocked.Exchange 將其作為原子操作執行,因此它是執行緒安全的。
不,框架沒有這樣的方法。可能原因是內置它並沒有太多好處,您可以很容易地(就像您所做的那樣)自己添加它。這也需要使用
refas 參數,這將極大地限制案例。例如,您不能這樣做:List<int> test; // ... Swap(ref test[0], ref test[1]); // won't work, it's an indexer, not an array