使用規則支援適當的 .NET 使用方式。
本節內容
| 規則 | 描述 |
|---|---|
| CA1801: 檢查未使用的參數 | 方法簽章包括不用於方法主體中的參數; |
| CA1816: 正確呼叫 GC.SuppressFinalize | 作為 Dispose 實作的方法未呼叫 GC.SuppressFinalize;或者,不是 Dispose 實作的方法卻呼叫了 GC.SuppressFinalize;或者,某個方法呼叫了 GC.SuppressFinalize,並傳遞了不是 this 的內容(在 Visual Basic 中為 Me)。 |
| CA2200: 重新擲回以保留堆疊詳細資訊 | 例外狀況會重新擲回,且在 throw 陳述式中明確指定該例外狀況。 如果藉由在 throw 陳述式中指定該例外狀況來重新擲出例外狀況,則從原先擲出該例外狀況的方法到目前方法之間的方法呼叫清單就會遺失。 |
| CA2201:不要引發保留的例外狀況類型 | 這會使原始錯誤難以偵測和偵錯。 |
| CA2207: 以內嵌方式初始化值類型的靜態欄位 | 實值類型會宣告明確的靜態建構函式。 若要修正此規則的違規情形,請在宣告所有靜態資料時將靜態資料初始化,並移除靜態建構函式。 |
| CA2208: 正確具現化參數例外 | 對例外狀況類型為 (或衍生自) ArgumentException 的預設 (無參數) 建構函式進行呼叫,或將錯誤的字串引數傳遞至例外狀況類型為 (或衍生自) ArgumentException 的參數化建構函式。 |
| CA2211:非常數欄位不應該為可見的 | 不是常數或唯讀的靜態欄位不是執行緒安全的。 對這類欄位的存取必須謹慎控制,而且需要使用進階的程式設計技術,才能將對類別物件的存取加以同步。 |
| CA2213: 可處置欄位應予以處置 | 實作 System.IDisposable 的型別會宣告一些欄位,而這些欄位的型別也會實作 IDisposable。 欄位的 Dispose 方法不會由宣告型別的 Dispose 方法呼叫。 |
| CA2214:不要呼叫建構函式中的可覆寫方法 | 當建構函式呼叫虛擬方法時,叫用方法的實例建構函式可能尚未執行。 |
| CA2215:Dispose 方法應該呼叫基底類別處置 | 如果類型繼承自可處置型別,則必須在自己的 Dispose 方法中呼叫基底型別的 Dispose 方法。 |
| CA2216:可處置的類型應該宣告完成項 | 實作 System.IDisposable 的型別若具有暗示使用非受控資源的欄位,則不會依照 Object.Finalize 所述實作完成項。 |
| CA2217:不要以 FlagsAttribute 標記列舉 | 外部可見的列舉會以 FlagsAttribute 標記,且具有一個或多個值,而這些值不是 2 的冪次,也不是該列舉中其他已定義值的組合。 |
| CA2218:覆寫 Equals 時必須一併覆寫 GetHashCode | 公用類型覆寫了 System.Object.Equals,但未覆寫 System.Object.GetHashCode。 |
| CA2219:不要在 exception 子句中引發例外狀況 | 在 finally 或 fault 子句中引發例外狀況時,新的例外狀況會隱藏作用中的例外狀況。 當篩選子句中引發例外狀況時,執行階段會默默地攔截該例外狀況。 這會使原始錯誤難以偵測和偵錯。 |
| CA2224: 多載等號運算子時應覆寫 Equals | 公用類型實作了等號運算子,但未覆寫 System.Object.Equals。 |
| CA2225:運算子多載必須有具名的替代方法 | 偵測到運算子多載,且找不到預期的具名替代方法。 具名的替代成員提供與運算符相同功能的存取權,並提供給不支援多載運算符之語言的開發人員。 |
| CA2226: 運算子應具備對稱多載 | 型別會實作相等或不等比較運算符,而且不會實作相反的運算符。 |
| CA2227: 集合屬性應為唯讀 | 可寫入的集合屬性允許使用者以不同的集合來取代該集合。 唯讀屬性會防止集合被取代,但仍允許設定個別成員。 |
| CA2229:必須實作序列化建構函式 | 若要修正此規則的違規情形,請實作序列化建構函式。 對於 sealed 類別,將建構函式設為 private;否則設為 protected。 |
| CA2231: 覆寫 ValueType.Equals 時多載等號運算子 | 實值類型覆寫了 Object.Equals,但未實作相等運算子。 |
| CA2234:必須傳遞 System.Uri 物件而非字串 | 對某個方法進行呼叫,而該方法具有名稱包含 "uri"、"URI"、"urn"、"URN"、"url" 或 "URL" 的字串參數。 方法的宣告類型包含具有 System.Uri 參數的對應方法多載。 |
| CA2235:必須標記所有不可序列化的欄位 | 可序列化之類型中所宣告之類型的執行個體 (Instance) 欄位是不可序列化的。 |
| CA2237: 以 SerializableAttribute 標記 ISerializable 類型 | 若要讓 Common Language Runtime 將類型辨識為可序列化,即使該類型透過實作 ISerializable 介面使用自訂序列化常式,也必須以 SerializableAttribute 屬性標記。 |
| CA2241:必須提供格式化方法的正確引數 | 傳遞至 String.Format 的格式引數未包含與每個物件引數對應的格式項目,或反之亦然。 |
| CA2242: 正確測試 NaN | 此表達式會針對 Single.Nan 或 Double.Nan測試值。 使用 Single.IsNan(Single) 或 Double.IsNan(Double) 來測試值。 |
| CA2243: 屬性字串常值應可正確剖析 | 屬性的字串常值參數無法正確剖析 URL、GUID 或版本。 |
| CA2244:請勿複製索引元素初始化 | 物件初始設定式中有多個使用相同常數索引的索引元素初始設定式。 除了最後一個初始設定式,其他全都是不必要的。 |
| CA2245:請勿將屬性指派給自己 | 某個屬性被意外地指派給自己。 |
| CA2246:請勿在相同的陳述式中指派符號及其成員 | 不建議在相同的陳述式中指派符號及其成員,也就是欄位或屬性。 目前尚不清楚,此陳述式中的成員存取究竟是要使用指派前符號的舊值,還是使用指派所產生的新值。 |
| CA2247:傳遞至 TaskCompletionSource 建構函式的引數應為 TaskCreationOptions 列舉,而非 TaskContinuationOptions 列舉 | TaskCompletionSource 具有接受 TaskCreationOptions 以控制基礎 Task 的建構函式,也具有接受儲存在 Task 中之物件狀態的建構函式。 不小心傳遞 TaskContinuationOptions (而不是 TaskCreationOptions) 會導致呼叫將選項視為狀態。 |
| CA2248:將正確的 'enum' 自變數提供給 'Enum.HasFlag' | 傳遞為 HasFlag 方法呼叫引數的列舉類型與呼叫列舉類型不同。 |
| CA2249:請考慮使用 String.Contains 而非 String.IndexOf | 若呼叫 string.IndexOf 的結果是用來檢查子字串是否存在,則可改用 string.Contains。 |
CA2250:使用 ThrowIfCancellationRequested |
ThrowIfCancellationRequested 會自動檢查權杖是否已取消,如果已取消,則會擲回 OperationCanceledException。 |
CA2251:使用 String.Equals (而不是 String.Compare) |
使用 String.Equals,而不是將 String.Compare 的結果與零比較,會更清楚,而且可能也更快。 |
| CA2252:選擇加入預覽功能 | 請先選擇啟用預覽功能,再使用預覽 API。 |
| CA2253:具名預留位置符號不應使用數值 | 記錄訊息範本中的具名預留位置不應僅由數字字元組成。 |
| CA2254:範本應該是靜態運算式 | 記錄訊息範本在不同呼叫之間不應有異。 |
CA2255:ModuleInitializer 屬性不應該用於程式庫 |
模組初始設定式旨在供應用程式程式碼使用,以確保應用程式元件會在應用程式程式碼開始執行之前初始化。 |
| CA2256:在父代介面中宣告的所有成員,都必須在具有 DynamicInterfaceCastableImplementation 屬性的介面中具備實作 | 以 DynamicInterfaceCastableImplementationAttribute 標註的型別,會作為實作 IDynamicInterfaceCastable 型別之型別的介面實作。 因此,其必須提供繼承介面中定義之所有成員的實作,因為實作 IDynamicInterfaceCastable 的型別不會以別種方式提供這些實作。 |
| CA2257:在有 'DynamicInterfaceCastableImplementationAttribute' 介面上定義的成員應為 'static' | 由於實作的 IDynamicInterfaceCastable 型別可能不會在元資料中實作動態介面,呼叫非明確定義於此型別的實例介面成員,在執行時很可能會失敗。 標記新的介面成員 static 以避免執行時錯誤。 |
| CA2258:在 Visual Basic 中提供 'DynamicInterfaceCastableImplementation' 介面不受支援 | 提供具有 DynamicInterfaceCastableImplementationAttribute 屬性的函式介面需要使用「預設介面成員」功能,但 Visual Basic 不支援此功能。 |
CA2259:確保 ThreadStatic 只與靜態欄位搭配使用 |
ThreadStaticAttribute 只會影響 static (Visual Basic 中的 Shared) 欄位。 當套用到執行個體欄位時,該特性不會影響其行為。 |
| CA2260:正確實作泛型數學介面 | 泛型數學介面要求必須使用衍生型別本身作為自我遞迴型別參數。 |
CA2261:請勿使用 ConfigureAwaitOptions.SuppressThrowing 搭配 Task<TResult> |
泛型 Task<TResult> 不支援 ConfigureAwaitOptions.SuppressThrowing 選項,因為這可能導致傳回無效的 TResult。 |
CA2262:正確設定MaxResponseHeadersLength |
請確定 MaxResponseHeadersLength 已正確提供值。 此值是以 KB 為單位來測量。 |
| CA2263:當型別已知時偏好泛型多載 | 當型別已知時,使用泛型多載比傳遞 System.Type 引數更理想,因為這樣可讓程式碼更簡潔、具備更高的型別安全性,並改善編譯期檢查。 |
| CA2264:請勿將不可為 Null 的值傳遞至 'ArgumentNullException.ThrowIfNull' | 當傳遞的自變數為 'null' 時,'ArgumentNullException.ThrowIfNull' 會擲回。 某些建構,例如不可為 Null 的結構,以及 'nameof()' 和 'new' 表達式已知永遠不會是 Null,因此 'ArgumentNullException.ThrowIfNull' 永遠不會擲回。 |
CA2265:不要將 Span<T> 與 null 或 default 比較 |
將 span 與 null 或 default 比較,結果可能不如您預期。
default 和常值 null 會隱含轉換為 Span<T>.Empty。 |
CA2266:以檔案為基礎的程式進入點應以 #! 開始 |
當一個檔案型程式包含多個檔案時,入口檔應該以 shebang (#!) 行開頭,以明確區分於其他包含的檔案。 |