簡體   English   中英

在使用“as”投射對象之前是否需要進行 C# null 檢查?

[英]Is a C# null check required prior to casting an object with "as"?

我只能在 SO 上為 Java/ActionScript 標簽找到解決方案。 如果這是重復的,請告訴我,我會刪除。

使用 ASP.Net MVC 5,我將模型類從 ViewBag 傳遞到它呈現為表單的局部視圖:

@if (ViewBag.CourseQuoteRequest != null && ViewBag.CourseQuoteRequest as CourseQuoteRequest != null)
{
    <div>
        @Html.Partial("~/Views/Partial/_CourseQuoteRequest.cshtml", (CourseQuoteRequest) ViewBag.CourseQuoteRequest)
    </div>
}

空檢查是否可以可靠地簡化為僅檢查空一次? ViewBag 模型存在很重要(對我們而言),並且僅在部分視圖是正確的類類型時才呈現:

@if (ViewBag.CourseQuoteRequest as CourseQuoteRequest != null) // Acceptable and reliable?

以上運行,但我不確定是否有任何風險被引入。

您可以使用is運算符簡化空檢查

@if (ViewBag.CourseQuoteRequest is CourseQuoteRequest)

此外,如果您需要課程報價請求對象,您可以使用模式匹配

@if (ViewBag.CourseQuoteRequest is CourseQuoteRequest request)
{
    <div>
        @Html.Partial("~/Views/Partial/_CourseQuoteRequest.cshtml", request)
    </div>
}

請參閱此處獲取文檔

as null :)

如果您將null傳遞給as它將返回null

但使用is運算符可以更簡化:

if (ViewBag.CourseQuoteRequest is CourseQuoteRequest courseQuoteRequest)

並根據if可以安全地使用courseQuoteRequest ,這將是類型CourseQuoteRequest

@if (ViewBag.CourseQuoteRequest is CourseQuoteRequest courseQuoteRequest)
{
    <div>
        @Html.Partial("~/Views/Partial/_CourseQuoteRequest.cshtml", courseQuoteRequest)
    </div>
}

請參閱類型模式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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