应该是两种不相等的类型

时间:2010-09-02 02:01:33

标签: c# .net reflection

我正在尝试调试一些使用反射来加载插件的代码

这是调试代码:

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,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
  OrtzIRC.Common.MessageContext,OrtzIRC.Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
  假

我不明白是什么让这两种类型不同?

4 个答案:

答案 0 :(得分:17)

由不同应用程序域[.NET]或类加载器[Java]加载的相同类/类型将不会相等,并且不能直接相互分配。

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

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

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

通常,您只需要每个DLL的一个副本,并将其加载到单个应用程序域中。

答案 1 :(得分:3)

如果从程序集的不同版本加载两种类型,则会发生这种情况。 .NET认为它们是不同的,不相关的类型。检查

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

答案 2 :(得分:0)

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

C# Object Type Comparison

我认为你的问题存在于类型层次结构......

答案 3 :(得分:0)

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

相关问题