【发布时间】:2022-01-23 05:17:23
【问题描述】:
我有一个事件处理程序,其中:
public void Handle (object sender, object[] parameters)
在处理程序中我有一些代码:
var _view = sender as ISomeInterface;
if(_view != null) { ... do stuff }
然而,尽管sender 是实现ISomeInterface 的类型,但条件失败。
更奇怪的是我的调试器显示的内容:
typeof(ISomeInterface).AssemblyQualifiedName
When evaluated, the debugger shows:
My.Company.ISomeInterface, MyCompany.Common, Version=1.0.8025.23774, Culture=neutral, PublicKeyToken=null
根据调试器也是如此:
sender.GetType().GetInterfaces()[4].AssemblyQualifiedName
When evaluated, the debugger shows:
My.Company.ISomeInterface, MyCompany.Common, Version=1.0.8025.23774, Culture=neutral, PublicKeyToken=null
然而,当我评估sender is ISomeInterface 时,它返回false。谁能帮我理解这怎么可能?
编辑#1
在从版本控制中签出后,同事的机器上也会发生同样的奇怪行为,所以不仅仅是我的机器/操作系统/软件有某种问题。
【问题讨论】:
-
您确定它不会多次使用同一个句柄方法:一次使用预期类型,另一次使用不同类型?
-
另外,您确定您的项目中没有多个
ISomeInterface,并且在实际检查中在运行时使用另一个? -
type(ISomeInterface).IsAssignableFrom(sender)返回什么?
标签: c#