我思考我很好地掌握了is
关键字和IsAssignableFrom
方法之间的the difference,但研究SubControllers in MVC我跑了在一些让我想到的代码中可能有一些我不知道的东西。这是:
object value = pair.Value;
if(value == null)
{
continue;
}
if (typeof(ISubController).IsAssignableFrom(value.GetType()))
{
var controller = (ISubController) value;
filterContext.Controller.ViewData.Add(pair.Key, controller.GetResult(filterContext.Controller));
}
第二个if
语句在我看来就像是一个错综复杂的版本:
if (value is ISubController)
另外,我previously learned typeof(T).IsValueType
的时间约为x is ValueType
的三倍,所以我认为他们不会因为这种额外的并发症而获得任何性能优势。
我在这里缺少一些细微差别吗?我想认为ASP.NET MVC的人知道他们在做什么。
答案 0 :(得分:1)
即使如下,也可以重写该代码:
var controller = value as ISubController;
if (controller != null)
filterContext.Controller.ViewData.Add(pair.Key, controller.GetResult(filterContext.Controller));
我认为在该代码中使用IsAssignableFrom存在重要原因。只有少数等价的选项。