![](/img/trans.png)
[英]value.GetType().IsSubClassOf(ClassBase) give me the error of "'ClassBase' is a type, which is not valid in the given context"
[英]Why “typeof(ISubController).IsAssignableFrom(value.GetType())” instead of “value is ISubController”
我以為我對is
關鍵字和IsAssignableFrom
方法之間的區別有了很好的了解,但是在MVC中研究SubController時,我遇到了一些代碼,這些代碼使我覺得也許我缺少了一些東西。 這里是:
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)
另外,我以前已經了解到 typeof(T).IsValueType
大約是x is ValueType
三倍,所以我認為它們不會因這種復雜性而獲得任何性能優勢。
我在這里想念一些細微差別嗎? 我想認為ASP.NET MVC的人知道他們在做什么。
該代碼可以重寫,如下所示:
var controller = value as ISubController;
if (controller != null)
filterContext.Controller.ViewData.Add(pair.Key, controller.GetResult(filterContext.Controller));
我認為在該代碼中不存在使用IsAssignableFrom的重要原因。 僅有的幾種選擇之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.