在尝试学习Unity时,我不断看到以下代码在MVC中覆盖GetControllerInstance
:
if(!typeof(IController).IsAssignableFrom(controllerType)) { ... }
在我看来,这基本上是一种复杂的写作方式
if(controllerType is IController) { ... }
我欣赏
is
和IsAssignableFrom
之间存在细微的差异,即IsAssignableFrom
不包含强制转换,但是我在努力理解这种差异在实际场景中的含义。什么时候选择
IsAssignableFrom
而不是is
? GetControllerExample
有什么区别?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方法用于检查类型是否与给定类型兼容。