这样的方法是否存在于框架中的任何位置?
public static void Swap<T>(ref T left, ref T right) {
T temp;
temp = left;
left = right;
right = temp;
}
Run Code Online (Sandbox Code Playgroud)
如果没有,有什么理由吗?
Ree*_*sey 10
有Interlocked.Exchange.这是在线程安全的原子调用中完成的.
评论后编辑:
为了澄清使用Interlocked.Exchange如何工作,你会做:
left = Interlocked.Exchange(ref right, left);
Run Code Online (Sandbox Code Playgroud)
这将与执行相同(实际上):
Swap(ref left, ref right);
Run Code Online (Sandbox Code Playgroud)
但是,Interlocked.Exchange将其作为原子操作执行,因此它是线程安全的.
不,框架没有这样的方法。原因可能是内置它没有太大好处,并且您可以非常轻松地(就像您所做的那样)自己添加它。这也需要使用refas 参数,这将极大地限制用例。例如,你不能这样做:
List<int> test;
// ...
Swap(ref test[0], ref test[1]); // won't work, it's an indexer, not an array
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5998 次 |
| 最近记录: |