这是我正在处理的.NET Core应用程序中遇到的一个奇怪的小问题。我正在为从消息队列中反序列化的消息编写一些消息处理程序,消息处理程序具有确定它们是否可以处理特定消息的功能:
public class DoWorkMessageHandler : IMessageHandler
{
public bool CanHandle(Message message)
{
return message is DoWorkMessage;
}
}
public class DoWorkMessage : Message
{
}
如果我让代码运行,反序列化DoWorkMessage
并将其传递给方法,它将返回false
,这不是我期望的。但是,如果我在其中放置一个断点,并在VS2019的“即时”窗口中运行相同的表达式,则其求值为true
。从调试器中我可以看到message
确实是DoWorkMessage
,那么为什么它的评估结果不正确?
如果我将逻辑更改为:
public bool CanHandle(Message message)
{
return message.GetType().AssemblyQualifiedName == typeof(DoWorkMessage).AssemblyQualifiedName;
}
然后代码按预期工作-为什么message is DoWorkMessage
不起作用(除非我在“即时”窗口中执行它)?