2010-07-14 5 views
2

Je pensais J'ai eu une assez bonne compréhension de the difference entre le mot-clé is et la méthode IsAssignableFrom, mais la recherche SubControllers in MVC J'ai croisé du code qui m'a fait penser qu'il y avait peut-être quelque chose qui me manquait. Ici, il est:« typeof (ISubController) .IsAssignableFrom (value.GetType()) » au lieu de « valeur est ISubController »

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)); 
} 

Cette deuxième déclaration if me semble comme une version alambiquée de:

if (value is ISubController) 

Aussi, j'avais previously learned que typeof(T).IsValueType prend environ trois fois plus longtemps que x is ValueType, donc je don Je ne pense pas qu'ils obtiennent un avantage de performance de cette complication supplémentaire.

Y at-il une nuance qui me manque ici? J'aimerais penser que les gars d'ASP.NET MVC savent ce qu'ils font.

Répondre

1

Ce code peut être réécrite même comme suit:

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

Je ne pense pas que raison importante existe pour l'utilisation IsAssignableFrom dans ce code. Juste une option parmi quelques équivalents.

Questions connexes