使用規則

使用規則支援適當的 .NET 使用方式。

本節內容

規則 描述
CA1801:必須檢閱未使用的參數 方法簽章包括不用於方法主體中的參數;
CA1816:正確呼叫 GC.SuppressFinalize 實作 Dispose 的方法不會呼叫 ;或不是呼叫實作Dispose的方法;或方法會呼叫 GC.SuppressFinalizeGC.SuppressFinalize 並傳遞 (Me在 Visual Basic 中) 以外的this專案。GC.SuppressFinalize
CA2200:必須重新擲回以保存堆疊詳細資料 例外狀況遭到重新擲回,而且已在 throw 陳述式中明確指定此例外狀況。 如果例外狀況是透過在陳述式中指定例外狀況而重新擲回,則會遺失在擲回例外狀況之原始方法和目前方法之間呼叫的方法清單。
CA2201:不要引發保留的例外狀況類型 這會使原始錯誤難以偵測和偵錯。
CA2207:必須將實值類型的靜態欄位內嵌初始化 實值類型會宣告明確的靜態建構函式。 若要修正此規則的違規情形,請在宣告所有靜態資料時將靜態資料初始化,並移除靜態建構函式。
CA2208:必須正確執行個體化引數例外狀況 對例外狀況類型為 (或衍生自) ArgumentException 的預設 (無參數) 建構函式進行呼叫,或將錯誤的字串引數傳遞至例外狀況類型為 (或衍生自) ArgumentException 的參數化建構函式。
CA2211:非常數欄位不應該為可見的 不是常數或只讀的靜態字段不是安全線程。 必須仔細控制這類欄位的存取權,而且需要進階程式設計技術,才能同步處理類別物件的存取權。
CA2213:可處置的欄位應該受到處置 實作 System.IDisposable 的型別會宣告同時實 IDisposable作 之型別的欄位。 宣告 Dispose 型別的 方法不會呼叫 Dispose 欄位的方法。
CA2214:不要呼叫建構函式中的可覆寫方法 當建構函式呼叫虛擬方法時,叫用方法的實例建構函式可能尚未執行。
CA2215:Dispose 方法應該呼叫基底類別處置 如果類型繼承自可處置型別,則必須從自己的 Dispose 方法呼叫Dispose基底型別的 方法。
CA2216:可處置的類型應該宣告完成項 實作 System.IDisposable的型別,且具有建議使用 Unmanaged 資源的欄位,不會實作完成項,如 所述 Object.Finalize
CA2217:不要以 FlagsAttribute 標記列舉 外部可見的列舉會標示為 FlagsAttribute,而且其具有一或多個值,這些值不是兩個或列舉上另一個定義值的組合。
CA2218:覆寫 Equals 時必須一併覆寫 GetHashCode 公用型別會覆寫 System.Object.Equals,但不會覆寫 System.Object.GetHashCode
CA2219:不要在 exception 子句中引發例外狀況 在 finally 或 fault 子句中引發例外狀況時,新的例外狀況會隱藏作用中的例外狀況。 在篩選子句中引發例外狀況時,運行時間會以無訊息方式擷取例外狀況。 這會使原始錯誤難以偵測和偵錯。
CA2224:多載等號比較運算子時必須一併覆寫 Equals 公用型別會實作等號運算子,但不會覆寫 System.Object.Equals
CA2225:運算子多載必須有具名的替代方法 偵測到運算子多載,且找不到預期的具名替代方法。 具名的替代成員提供與運算符相同功能的存取權,並提供給不支援多載運算符之語言的開發人員。
CA2226:運算子應該有對稱的多載 型別會實作相等或不等比較運算符,而且不會實作相反的運算符。
CA2227:集合屬性應該為唯讀 可寫入的集合屬性允許使用者以不同的集合來取代該集合。 唯讀屬性會從取代過程中停止集合,但是仍然允許設定個別成員。
CA2229:必須實作序列化建構函式 若要修正此規則的違規情形,請實作序列化建構函式。 針對密封類別,讓建構函式成為 private,否則為 protected。
CA2231:在覆寫 ValueType.Equals 上多載等號運算子 實值型別會 Object.Equals 覆寫,但不會實作等號比較運算符。
CA2234:必須傳遞 System.Uri 物件而非字串 呼叫字串參數名稱包含 "uri"、"URI"、"urn"、"URN"、"url" 或 "URL", 方法的宣告類型包含具有 System.Uri 參數的對應方法多載。
CA2235:必須標記所有不可序列化的欄位 可序列化之類型中所宣告之類型的執行個體 (Instance) 欄位是不可序列化的。
CA2237:ISerializable 類型必須標記 SerializableAttribute 若要讓 Common Language Runtime 辨識為可串行化,即使類型透過 介面的 ISerializable 實作使用自定義串行化例程,也必須以 SerializableAttribute 屬性標示類型。
CA2241:必須提供格式化方法的正確引數 傳遞至 String.Format 的格式自變數不包含對應至每個物件自變數的格式專案,反之亦然。
CA2242:必須正確測試 NaN 此表達式會針對 Single.NanDouble.Nan測試值。 使用 Single.IsNan(Single)Double.IsNan(Double) 來測試值。
CA2243:屬性字串常值必須正確剖析 屬性的字串常值參數無法正確剖析 URL、GUID 或版本。
CA2244:請勿複製索引元素初始化 物件初始設定式有多個具有相同常數索引的索引項目初始設定式。 除了最後一個初始設定式,其他全都是不必要的。
CA2245:請勿將屬性指派給屬性自身 不小心將屬性指派給本身。
CA2246:請勿在相同的陳述式中指派符號及其成員 不建議在相同的陳述式中指派符號及其成員,也就是欄位或屬性。 目前不清楚成員存取是在要使用在指派之前的符號舊值,還是在此陳述式中指派的新值。
CA2247:傳遞至TaskCompletionSource 建構函式的自變數應該是TaskCreationOptions 列舉,而不是TaskContinuationOptions 列舉 TaskCompletionSource 具有採用 TaskCreationOptions 來控制基礎工作的建構函式,以及採用在工作中儲存之物件狀態的建構函式。 不小心傳遞 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> ConfigureAwaitOptions.SuppressThrowingTask<TResult>不支援 這個選項,因為這可能會導致傳回無效 TResult的 。
CA2262:正確設定MaxResponseHeadersLength 請確定 MaxResponseHeadersLength 已正確提供值。 此值是以 KB 為單位來測量。
CA2264:請勿將不可為 Null 的值傳遞至 'ArgumentNullException.ThrowIfNull' 當傳遞的自變數為 'null' 時,'ArgumentNullException.ThrowIfNull' 會擲回。 某些建構,例如不可為 Null 的結構,以及 'nameof()' 和 'new' 表達式已知永遠不會是 Null,因此 'ArgumentNullException.ThrowIfNull' 永遠不會擲回。
CA2263:當型別已知時偏好泛型多載 當已知型別時,最好使用泛型多載傳遞 System.Type 自變數,因為它們會提升更簡潔且更安全的型別程序代碼,並透過改良的編譯時間檢查。