Regole di utilizzo

Le regole di utilizzo supportano l'uso corretto di .NET.

In questa sezione

Regola Descrizione
CA1801: Rivedere i parametri non usati Una firma di metodo include un parametro non utilizzato nel corpo del metodo.
CA1816: Chiamare GC.SuppressFinalize correttamente Un metodo che è un'implementazione di Dispose non chiama GC.SuppressFinalize; o un metodo che non è un'implementazione di Dispose chiamate GC.SuppressFinalize; o un metodo chiama GC.SuppressFinalize e passa qualcosa di diverso da this (Me in Visual Basic).
CA2200: Eseguire il rethrow per mantenere i dettagli dello stack Viene generata di nuovo un'eccezione, specificata in modo esplicito nell'istruzione throw. Se un'eccezione viene generata di nuovo tramite la specifica nell'istruzione throw, l'elenco di chiamate ai metodi tra il metodo originale che ha generato l'eccezione e il metodo corrente viene perso.
CA2201: Non generare tipi di eccezione riservati In questo modo l'errore originale risulta difficile da rilevare ed eseguire il debug.
CA2207: Inizializzare i campi statici dei tipi di valore inline Un tipo di valore dichiara un costruttore statico esplicito. Per correggere una violazione di questa regola, inizializzare tutti i dati statici quando vengono dichiarati e rimuovere il costruttore statico.
CA2208: Creare istanze di eccezioni di argomento correttamente Viene effettuata una chiamata al costruttore predefinito (senza parametri) di un tipo di eccezione che corrisponde a o deriva da ArgumentException oppure viene passato un argomento stringa non corretto a un costruttore con parametri di un tipo di eccezione che corrisponde a o deriva da ArgumentException.
CA2211: I campi non costanti non devono essere visibili I campi statici che non sono costanti o di sola lettura non sono thread-safe. L'accesso a tale campo deve essere controllato attentamente e richiede tecniche di programmazione avanzate per sincronizzare l'accesso all'oggetto classe.
CA2213: I campi Disposable devono essere eliminati Tipo che implementa System.IDisposable dichiara campi di tipi che implementano IDisposableanche . Il Dispose metodo del campo non viene chiamato dal Dispose metodo del tipo dichiarante.
CA2214: Non chiamare metodi sottoponibili a override nei costruttori Quando un costruttore chiama un metodo virtuale, è possibile che il costruttore per l'istanza che richiama il metodo non sia stato eseguito.
CA2215: I metodi Dispose devono chiamare il metodo Dispose della classe base Se un tipo eredita da un tipo eliminabile, deve chiamare il Dispose metodo del tipo di base dal proprio Dispose metodo.
CA2216: I tipi Disposable devono dichiarare un finalizzatore Un tipo che implementa System.IDisposablee include campi che suggeriscono l'uso di risorse non gestite, non implementa un finalizzatore come descritto da Object.Finalize.
CA2217: Non contrassegnare le enumerazioni con FlagsAttribute Un'enumerazione visibile esternamente è contrassegnata con FlagsAttributee ha uno o più valori che non sono poteri di due o una combinazione degli altri valori definiti nell'enumerazione.
CA2218: Eseguire l'override di GetHashCode all'override di Equals Un tipo pubblico esegue l'override System.Object.Equals di ma non esegue l'override System.Object.GetHashCodedi .
CA2219: Non generare eccezioni in clausole di eccezione Quando un'eccezione viene generata in una clausola finally o in una clausola fault, la nuova eccezione nasconde l'eccezione attiva. Quando viene generata un'eccezione in una clausola di filtro, il runtime rileva automaticamente l'eccezione. In questo modo l'errore originale risulta difficile da rilevare ed eseguire il debug.
CA2224: Eseguire l'override di Equals all'override dell'operatore Un tipo pubblico implementa l'operatore di uguaglianza ma non esegue l'override di System.Object.Equals.
CA2225: Gli overload degli operatori hanno alternative con nome È stato rilevato un overload di operatore e il metodo alternativo denominato previsto non è stato trovato. Il membro alternativo denominato fornisce l'accesso alla stessa funzionalità dell'operatore e viene fornito agli sviluppatori che programmano in linguaggi che non supportano operatori di overload.
CA2226: Gli operatori devono avere overload simmetrici Un tipo implementa l'operatore di uguaglianza o disuguaglianza e non implementa l'operatore opposto.
CA2227: Le proprietà di raccolte devono essere in sola lettura Una proprietà di raccolta scrivibile consente a un utente di sostituire la raccolta con una raccolta diversa. Una proprietà di sola lettura interrompe la sostituzione della raccolta ma consente ancora l'impostazione dei singoli membri.
CA2229: Implementare costruttori di serializzazione Per correggere una violazione di questa regola, implementare il costruttore di serializzazione. Per una classe sealed, rendere il costruttore privato; in caso contrario renderlo protetto.
CA2231: Eseguire l'overload dell'operatore "uguale a" all'override di ValueType.Equals Un tipo di valore esegue l'override Object.Equals ma non implementa l'operatore di uguaglianza.
CA2234: Passare oggetti System.Uri invece di stringhe Viene effettuata una chiamata a un metodo che dispone di un parametro di stringa il cui nome contiene "uri", "URI", "urn", "URN", "url" o "URL". Il tipo dichiarante del metodo contiene un overload del metodo corrispondente con un System.Uri parametro .
CA2235: Contrassegnare tutti i campi non serializzabili Un campo di istanza di un tipo non serializzabile viene dichiarato in un tipo serializzabile.
CA2237: Contrassegnare i tipi ISerializable con SerializableAttribute Per essere riconosciuto da Common Language Runtime come serializzabile, i tipi devono essere contrassegnati con l'attributo SerializableAttribute anche se il tipo usa una routine di serializzazione personalizzata tramite l'implementazione dell'interfaccia ISerializable .
CA2241: Specificare argomenti corretti ai metodi di formattazione L'argomento formato passato a String.Format non contiene un elemento di formato corrispondente a ogni argomento oggetto o viceversa.
CA2242: Testare i valori NaN in modo corretto Questa espressione verifica un valore su Single.Nan o Double.Nan. Usare Single.IsNan(Single) o Double.IsNan(Double) per testare il valore.
CA2243: Valori letterali stringa di attributo devono essere analizzate correttamente Il parametro letterale stringa di un attributo non analizza correttamente un URL, un GUID o una versione.
CA2244: Non duplicare le inizializzazioni degli elementi indicizzati Un inizializzatore di oggetto ha più di un inizializzatore di elementi indicizzati con lo stesso indice costante. Tutto ma l'ultimo inizializzatore è ridondante.
CA2245: Non assegnare una proprietà a se stessa Una proprietà è stata assegnata accidentalmente a se stessa.
CA2246: Non assegnare un simbolo e il relativo membro nella stessa istruzione Non è consigliabile assegnare un simbolo e il relativo membro, ovvero un campo o una proprietà, nella stessa istruzione. Non è chiaro se l'accesso al membro è stato progettato per usare il valore precedente del simbolo prima dell'assegnazione o il nuovo valore dell'assegnazione in questa istruzione.
CA2247: l'argomento passato al costruttore TaskCompletionSource deve essere l'enumerazione TaskCreationOptions anziché l'enumerazione TaskContinuationOptions TaskCompletionSource include costruttori che accettano TaskCreationOptions che controllano l'attività sottostante e i costruttori che accettano lo stato dell'oggetto archiviato nell'attività. Se si passa accidentalmente taskContinuationOptions anziché taskCreationOptions, la chiamata considera le opzioni come stato.
CA2248: specificare l'argomento 'enum' corretto per 'Enum.HasFlag' Il tipo di enumerazione passato come argomento alla chiamata al HasFlag metodo è diverso dal tipo di enumerazione chiamante.
CA2249: prendere in considerazione l'uso di String.Contains invece di String.IndexOf Le chiamate a dove string.IndexOf viene usato il risultato per verificare la presenza o l'assenza di una sottostringa possono essere sostituite da string.Contains.
CA2250: Usare ThrowIfCancellationRequested ThrowIfCancellationRequested controlla automaticamente se il token è stato annullato e genera un'eccezione OperationCanceledException se è presente.
CA2251: Usare String.Equals over String.Compare È sia più chiaro che probabilmente più veloce da usare String.Equals invece di confrontare il risultato di String.Compare a zero.
CA2252: Acconsentire esplicitamente alle funzionalità di anteprima Acconsentire esplicitamente alle funzionalità di anteprima prima di usare le API di anteprima.
CA2253: i segnaposto denominati non devono essere valori numerici I segnaposto denominati nel modello di messaggio di registrazione non devono essere costituiti solo da caratteri numerici.
CA2254: Il modello deve essere un'espressione statica Il modello di messaggio di registrazione non deve variare tra le chiamate.
CA2255: L'attributo ModuleInitializer non deve essere usato nelle librerie Gli inizializzatori di modulo devono essere usati dal codice dell'applicazione per assicurarsi che i componenti di un'applicazione vengano inizializzati prima che il codice dell'applicazione inizi l'esecuzione.
CA2256: tutti i membri dichiarati nelle interfacce padre devono avere un'implementazione in un'interfaccia con attributi DynamicInterfaceCastableImplementation Tipi con attributi che DynamicInterfaceCastableImplementationAttribute fungono da implementazione dell'interfaccia per un tipo che implementa il IDynamicInterfaceCastable tipo . Di conseguenza, deve fornire un'implementazione di tutti i membri definiti nelle interfacce ereditate, perché il tipo che implementa IDynamicInterfaceCastable non li fornirà altrimenti.
CA2257: i membri definiti in un'interfaccia con 'DynamicInterfaceCastableImplementationAttribute' devono essere 'statici' Poiché un tipo che implementa IDynamicInterfaceCastable potrebbe non implementare un'interfaccia dinamica nei metadati, è probabile che le chiamate a un membro dell'interfaccia dell'istanza che non sia un'implementazione esplicita definita in questo tipo non riescano in fase di esecuzione. Contrassegnare i nuovi membri static dell'interfaccia per evitare errori di runtime.
CA2258: La fornitura di un'interfaccia 'DynamicInterfaceCastableImplementation' in Visual Basic non è supportata Per fornire un'interfaccia funzionale DynamicInterfaceCastableImplementationAttributecon attributi è necessaria la funzionalità Membri interfaccia predefinita, non supportata in Visual Basic.
CA2259: Assicurarsi che ThreadStatic venga usato solo con i campi statici ThreadStaticAttribute influisce solo sui static campi (Shared in Visual Basic). Se applicato ai campi dell'istanza, l'attributo non ha alcun impatto sul comportamento.
CA2260: Implementare correttamente interfacce matematiche generiche Le interfacce matematiche generiche richiedono che il tipo derivato stesso venga usato per il parametro di tipo ricorrente.
CA2261: Non usare ConfigureAwaitOptions.SuppressThrowing con Task<TResult> L'opzione ConfigureAwaitOptions.SuppressThrowing non è supportata dall'oggetto generico Task<TResult>, perché potrebbe causare la restituzione di un oggetto non valido TResult.
CA2262: Impostare MaxResponseHeadersLength correttamente Assicurarsi che il MaxResponseHeadersLength valore sia specificato correttamente. Questo valore viene misurato in kilobyte.
CA2264: Non passare un valore non nullable a 'ArgumentNullException.ThrowIfNull' 'ArgumentNullException.ThrowIfNull' genera quando l'argomento passato è 'null'. Alcuni costrutti come struct non nullable e 'nameof()' e 'new' espressioni non sono mai null, quindi 'ArgumentNullException.ThrowIfNull' non genereranno mai un'eccezione.
CA2263: preferire overload generico quando il tipo è noto L'uso di un overload generico è preferibile passare un System.Type argomento quando il tipo è noto, perché promuove codice più pulito e più indipendente dai tipi con controlli in fase di compilazione migliorati.