两种不相等,应该是两种不相等,应该是(Two Types not equal that should

2019-05-12 02:20发布

我试图调试使用反射来加载插件一些代码

这里的调试代码:

Type a = methodInfo.GetParameters()[0]
    .ParameterType.BaseType;
Type b = typeof(MessageContext);
Debug.WriteLine(a.AssemblyQualifiedName);
Debug.WriteLine(b.AssemblyQualifiedName);
Debug.WriteLine(a.Equals(b));

这里是它的输出:

OrtzIRC.Common.MessageContext,OrtzIRC.Common,版本= 1.0.0.0,文化=中立,公钥=空
OrtzIRC.Common.MessageContext,OrtzIRC.Common,版本= 1.0.0.0,文化=中立,公钥=空

我不明白什么使这两类不同?

Answer 1:

由不同的应用程序域[.NET]或类加载器[爪哇]加载同一类/类型不会比较相等,并直接是不能分配给/从彼此。

你可能有一个包含该类型的DLL的两个副本-一个由主程序加载和一个由一个装Assembly.Load*(...)的方法呢?

尝试显示/比较特性:
a.Assembly.Equals(b.Assembly)

a.Assembly.Location.Equals(b.Assembly.Location)

在一般情况下,你只希望每个DLL的一个副本,并将其加载到一个单一的应用程序域。



Answer 2:

如果两个类都从不同版本的组件装载可能发生这种情况。 .NET认为它们不同,无关类型。 校验

Debug.WriteLine (a.AssemblyQualifiedName) ;
Debug.WriteLine (b.AssemblyQualifiedName) ;


Answer 3:

尝试: Debug.Writeline(a.Equals(b));



Answer 4:

这是你应该如何比较的类型:

C#对象类型比较

我觉得你的问题在于类型层次结构...



文章来源: Two Types not equal that should be