为什么“typeof(ISubController).IsAssignableFrom(value.GetType())”而不是“value is ISubController”

时间:2010-07-14 19:26:56

标签: c# types

思考我很好地掌握了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的人知道他们在做什么。

1 个答案:

答案 0 :(得分:1)

即使如下,也可以重写该代码:

var controller = value as ISubController;
if (controller != null)
    filterContext.Controller.ViewData.Add(pair.Key, controller.GetResult(filterContext.Controller));

我认为在该代码中使用IsAssignableFrom存在重要原因。只有少数等价的选项。