簡體   English   中英

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

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM