本文說明兩個相關規則,IDE0020 和 IDE0038。
| 財產 | 價值 |
|---|---|
| 規則標識碼 | 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 ... }。 根據轉換表示式是否應該儲存到個別局部變數,啟用 IDE0020 或 IDE0038:
-
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
如需詳細資訊,請參閱 如何在隱藏程式代碼分析警告。