[英]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.