gpt4 book ai didi

c# - 通用类型不相等

转载 作者:行者123 更新时间:2023-11-30 16:36:43 24 4
gpt4 key购买 nike

下面的代码段打印出“The types ARE NOT the same.”。为什么?我知道使用 interfaceOnMyType.GetGenericTypeDefinition() 可以解决问题,但我为什么要这样做?

class Program
{
static void Main(string[] args)
{
var myType = typeof(Baz<>);
var interfaceOnMyType = myType.GetInterfaces().SingleOrDefault();
var exactType = typeof(IBar<>);
if (exactType == interfaceOnMyType)
{
Console.WriteLine("The types ARE the same.");
}
else
{
Console.WriteLine("The types ARE NOT the same.");
}
Console.ReadLine();
}
}

interface IBar<T>
{
}

class Baz<T> : IBar<T>
{
}

最佳答案

interfaceOnMyType.GetGenericTypeDefinition()

返回接口(interface)的封闭构造类型,它不同于返回的类型

typeof(IBar<>)

Here is the MSDN article on GetGenericTypeDefinition ,这里有一段很好的引述来解释它是如何工作的:

Given a Type object representing this constructed type, the GetGenericTypeDefinition method returns the generic type definition.


编辑(上面的答案在某些情况下是正确的,但在这个情况下是错误的):

我想我现在可能已经找到了。类型比较失败的原因是 myType.GetInterfaces() 返回的 Type 与接口(interface)本身的类型接近但不完全相同。

根据 MSDN :

If you use the BaseType property to obtain the base type of Derived, the FullName property of the resulting Type object returns null (Nothing in Visual Basic). To get a non-null FullName, you can use the GetGenericTypeDefinition method to get the generic type definition.

所以我认为这就是您遇到的问题。由于基接口(interface)是通过 GetInterfaces 检索的,因此该调用检索到的任何类型都不会有 FullName ( source )。由于它没有 FullName,因此类型比较失败。

如果你比较的是你不是的构造类型,那么我最初写的就是真的。所以不幸的是,我的第一个答案是完全错误的——我把它留下了,这样留下的评论才有意义。

关于c# - 通用类型不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/511620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com