是否有 C++ std::is_same class 模板的 C# 类似物?

Is there any C# analogue of C++ std::is_same class template?

在 C++ 中,有人可以编写以下代码:

#include <type_traits>

template <typename Type1, typename Type2>
bool TestArgumentTypesOnEquality(Type1 argument1, Type2 argument2)
{
    return std::is_same<Type1, Type2>::value;
}

std::is_same class 模板检查 Type1Type2TestArgumentTypesOnEquality 函数模板参数的类型)是否相等。

是否有此 C++ 标准库功能的任何 C# 泛型模拟?

public static bool TestArgumentTypesOnEquality<Type1, Type2>(Type1 argument1, Type2 argument2)
{
    return /* ??? */;
}

当然只有简单的测试样本。实际代码更复杂。事实上,我只想知道是否可以在 C# 中测试两个泛型类型参数是否相等。

我不熟悉 C++,但 C# 中有两种类型的相等性 - 对象(引用)相等性和值相等性。值相等性检查结构属性的基础值,引用相等性检查引用类型的 "pointer" 以查看它们是否指向相同的对象引用。

要检查两个对象是否具有相同的类型(但不是相同的引用或相同的值),请使用 Assert(object1.GetType() == object2.GetType())

C# 没有很多编译时特性,例如模板、宏,static_assert。 C# 泛型几乎是运行时的。 C++ 模板绝对是编译时间。 std::is_samestd::enable_if 等编译器时间类型确定机制在 C# 中不起作用。

您可以根据反射对象做出决定:

if (typeof(Type1) == typeof(Type2)) ...

通常,泛型代码意味着不知道也不关心有关类型的任何具体内容。当然,如果情况允许,您可以偏离该规则。