Dot-Net

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

  • February 2, 2022

框架中的任何地方都存在這樣的方法嗎?

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

引用自:https://stackoverflow.com/questions/922505