我正在尝试创建一个函数,可以使用 xor 方法交换 c# 中的任意 2 个变量,无论它们是引用类型还是值类型。这可以正常工作吗?
public static void QuickSwap<T>(ref T a, ref T b) { if (ReferenceEquals(a, b) || (typeof(T).IsValueType && a == b)) return; a ^= b; b ^= a; a ^= b; }
否,因为 C# 中的 XOR 运算符仅针对 整数类型 和 bool 定义。
(任意类型上没有通用的 XOR 运算符,因为它会导致无效状态,这与 C# 作为类型安全语言的设计目标相矛盾:
myClass1 ^ myClass2
myStruct1 ^ myStruct2
无需编写函数来交换两个值。您可以只使用元组:
(a, b) = (b, a);