c# 中针对不同类型的通用异或交换
generic xor swap in c# for different types
我正在尝试创建一个函数,该函数可以使用 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;
}
没有,因为 XOR operator in C# is only defined for integral types 和 bool.
(没有针对任意类型的通用 XOR 运算符,因为它会导致无效状态,这与 C# 作为类型安全语言的设计目标相矛盾:myClass1 ^ myClass2
会指向无效内存位置,myStruct1 ^ myStruct2
的结果很可能也是垃圾。)
我正在尝试创建一个函数,该函数可以使用 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;
}
没有,因为 XOR operator in C# is only defined for integral types 和 bool.
(没有针对任意类型的通用 XOR 运算符,因为它会导致无效状态,这与 C# 作为类型安全语言的设计目标相矛盾:myClass1 ^ myClass2
会指向无效内存位置,myStruct1 ^ myStruct2
的结果很可能也是垃圾。)