在尝试学习Unity时,我不断看到以下代码在MVC中覆盖GetControllerInstance:

if(!typeof(IController).IsAssignableFrom(controllerType)) { ... }

在我看来,这基本上是一种复杂的写作方式
if(controllerType is IController) { ... }

我欣赏isIsAssignableFrom之间存在细微的差异,即IsAssignableFrom不包含强制转换,但是我在努力理解这种差异在实际场景中的含义。

什么时候选择IsAssignableFrom而不是isGetControllerExample有什么区别?
if (!typeof(IController).IsAssignableFrom(controllerType))
      throw new ArgumentException(...);
return _container.Resolve(controllerType) as IController;

最佳答案

这是不一样的。

if(controllerType is IController)

因为false始终是controllerType,而Type从来都不是Type,所以它将始终评估为IController
is运算符用于检查实例是否与给定类型兼容。

IsAssignableFrom方法用于检查类型是否与给定类型兼容。

08-19 01:55