Два типа не равны
Я пытаюсь отладить некоторый код, который использует отражение для загрузки плагинов
Здесь код отладки:
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 = нейтральный, PublicKeyToken = null
OrtzIRC.Common.MessageContext, OrtzIRC.Common, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null
False
Я не понимаю, что изменило бы эти два типа?
Ответы
Ответ 1
Тот же класс/тип, загруженный различными доменами приложений [.NET] или загрузчиками классов [Java], не будет сравниваться с равными и не будет назначаться напрямую/друг от друга напрямую.
Вероятно, у вас есть две копии DLL, содержащей этот тип: один загружен основной программой и один загружен одним из методов Assembly.Load*(...)
?
Попробуйте отобразить/сравнить свойства:
a.Assembly.Equals(b.Assembly)
и
a.Assembly.Location.Equals(b.Assembly.Location)
В общем, вы хотите только одну копию каждой DLL и загрузить ее в один домен приложения.
Ответ 2
Это может произойти, если два типа загружаются из разных версий сборки..NET рассматривает их разные, несвязанные типы. Проверьте
Debug.WriteLine (a.AssemblyQualifiedName) ;
Debug.WriteLine (b.AssemblyQualifiedName) ;
Ответ 3
Вот как вы должны сравнивать типы:
Сравнение типов объектов С#
Я думаю, ваша проблема заключается в иерархии типов...
Ответ 4
Попробуйте: Debug.Writeline(a.Equals(b));