共用方式為


使用模式比對來避免進行 'is' 檢查後再進行類型轉換 (IDE0020 和 IDE0038)

本文說明兩個相關規則,IDE0020IDE0038

財產 價值
規則標識碼 IDE0020
標題 使用模式比對以避免 is 檢查後面接著轉換 (含變數)
類別 風格
子類別 語言規則(模式匹配偏好設定)
適用的語言 C#
選項 csharp_style_pattern_matching_over_is_with_cast_check
財產 價值
規則標識碼 IDE0038
標題 使用模式比對以避免 is 檢查後面接著轉換 (不含變數)
類別 風格
子類別 語言規則(模式匹配偏好設定)
適用的語言 C#
選項 csharp_style_pattern_matching_over_is_with_cast_check

概述

此樣式規則涉及使用 C# 模式比對,例如,o is int i,在 is 檢查後面接著轉換,例如 if (o is int) { ... (int)o ... }。 根據轉換表示式是否應該儲存到個別局部變數,啟用 IDE0020IDE0038

  • IDE0020:將轉換表達式 保存到一個局部變數中。 例如,if (o is int) { var i = (int)o; } 會將 (int)o 的結果儲存在局部變數中。
  • IDE0038:轉換表達式 沒有被 儲存到局部變數中。 例如,if (o is int) { if ((int)o == 1) { ... } } 不會將 (int)o 的結果儲存到局部變數中。

選項

設定此規則的關聯選項值來指定是否要偏好模式比對或進行 is 檢查後再接著類型轉換。

如需設定選項的詳細資訊,請參閱 選項格式。

csharp_對模式匹配優於is類型轉換檢查的風格

財產 價值 描述
選項名稱 csharp_風格_模式匹配_優於_is_與_cast_檢查
選項值 true 偏好使用模式比對,而非使用帶有 is 類型轉換的表示式。
false 停用規則。
預設選項值 true
// csharp_style_pattern_matching_over_is_with_cast_check = true
if (o is int i) {...}

// csharp_style_pattern_matching_over_is_with_cast_check = false
if (o is int) {var i = (int)o; ... }

隱藏警告

如果您想要只隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable IDE0020 // Or IDE0038
// The code that's violating the rule is on this line.
#pragma warning restore IDE0020 // Or IDE0038

若要停用檔案、資料夾或項目的規則,請將其嚴重性設定為 組態檔中的 none

[*.{cs,vb}]
dotnet_diagnostic.IDE0020.severity = none
dotnet_diagnostic.IDE0038.severity = none

若要停用所有程式碼樣式規則,請將類別 Style 的嚴重性設定為 組態檔中的 none

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none

如需詳細資訊,請參閱 如何在隱藏程式代碼分析警告。

另請參閱