Some useful C# Swap methods

public static class SwapExt
{
	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	public static void Swap<T>(ref T? left, ref T? right) => (left, right) = (right, left);

	[Pure]
	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	public static (T? right, T? left) Swap<T>(this T? left, T? right) => (right, left);

	[Pure]
	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	public static (T? right, T? left) Swap<T>((T? left, T? right) tuple) => (tuple.right, tuple.left);
}

Pay close attention to which method you think is being used. (The refs versus the tuples.)