C# 中针对不同类型的通用异或交换

问题描述 投票:0回答:2

我正在尝试创建一个函数,可以使用 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# generics xor
2个回答
1
投票

否,因为 C# 中的 XOR 运算符仅针对 整数类型 和 bool 定义。

(任意类型上没有通用的 XOR 运算符,因为它会导致无效状态,这与 C# 作为类型安全语言的设计目标相矛盾:

myClass1 ^ myClass2
将指向无效的内存位置,并且结果
myStruct1 ^ myStruct2
也很可能是垃圾。)


0
投票

无需编写函数来交换两个值。您可以只使用元组:

(a, b) = (b, a);
© www.soinside.com 2019 - 2024. All rights reserved.