代码之家  ›  专栏  ›  技术社区  ›  StriplingWarrior

为什么“typeof(isubcontroller).isassignablefrom(value.getType())”而不是“value is isubcontroller”

  •  2
  • StriplingWarrior  · 技术社区  · 14 年前

    思想 我很清楚 the difference 之间 is 关键字与 IsAssignableFrom 方法,但研究 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 回复  |  直到 14 年前
        1
  •  1
  •   STO    14 年前

    该代码可以重写如下:

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

    我认为不存在在代码中使用isassignablefrom的重要原因。只有一个选择,从几个同等的。