Condividi tramite


Avvisi di utilizzo

Gli avvisi di utilizzo supportano l'utilizzo corretto di .NET Framework.

In questa sezione

Regola

Descrizione

CA1801: Rivedere i parametri inutilizzati

Una firma di metodo include un parametro non utilizzato nel corpo del metodo.

CA1806: Non ignorare i risultati dei metodi

Un nuovo oggetto viene creato, ma non viene mai utilizzato oppure viene chiamato un metodo che crea e restituisce una nuova stringa e la nuova stringa non viene mai utilizzata oppure un metodo COM o P/Invoke restituisce un HRESULT o un codice di errore che non viene mai utilizzato.

CA1816: Chiamare GC.SuppressFinalize correttamente

Un metodo che costituisce un'implementazione di Dispose non chiama GC.SuppressFinalize oppure un metodo che non costituisce un'implementazione di Dispose chiama GC.SuppressFinalize oppure un metodo chiama GC.SuppressFinalize e passa un elemento diverso da this (Me in Visual Basic).

CA2200: Eseguire il rethrow per conservare i dettagli dello stack

Viene generata di nuovo un'eccezione e quest'ultima viene specificata in modo esplicito nell'istruzione throw.Se un'eccezione viene generata di nuovo specificandola 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

Tale circostanza complica il rilevamento e il debug dell'errore originale.

CA2202: Non eliminare oggetti più volte

Un'implementazione di metodo contiene percorsi del codice che potrebbero comportare più chiamate a System.IDisposable.Dispose o a un equivalente di Dispose (ad esempio un metodo Close() per alcuni tipi) sullo stesso oggetto.

CA2204: I valori letterali devono essere digitati in modo corretto

Una stringa letterale in un corpo del metodo contiene una o più parole che non sono riconosciute dalla libreria del correttore ortografico Microsoft.

CA2205: Utilizzare equivalenti gestiti dell'API Win32

Viene definito un metodo di platform invoke e nella libreria di classi .NET Framework è presente un metodo con la funzionalità equivalente.

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 né in sola lettura non sono thread-safe.L'accesso a tali campi deve essere controllato attentamente e richiede tecniche di programmazione avanzate per la sincronizzazione dell'accesso all'oggetto classe.

CA2212: Non contrassegnare componenti serviti con WebMethod

Un metodo in un tipo che eredita da System.EnterpriseServices.ServicedComponent è contrassegnato con System.Web.Services.WebMethodAttribute.Poiché WebMethodAttribute e un metodo ServicedComponent presentano comportamenti e requisiti di contesto e flusso di transazioni in conflitto tra loro, il comportamento del metodo non sarà corretto in determinati scenari.

CA2213: I campi Disposable devono essere eliminati

Un tipo che implementa System.IDisposable dichiara i campi di tipi che implementano anch'essi IDisposable.Il metodo Dispose del campo non viene chiamato dal metodo Dispose 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 metodo Dispose del tipo di base dal proprio metodo Dispose.

CA2216: I tipi Disposable devono dichiarare un finalizzatore

Un tipo che implementa System.IDisposable e include campi che suggeriscono l'utilizzo 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 FlagsAttribute e presenta uno o più valori che non sono potenze di due o una combinazione degli altri valori definiti nell'enumerazione.

CA2218: Eseguire l'override di GetHashCode all'override di Equals

GetHashCode restituisce un valore, basato sull'istanza corrente, appropriato per algoritmi di hash e strutture dei dati come una tabella hash.Due oggetti dello stesso tipo e uguali devono restituire lo stesso codice hash.

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 un'eccezione viene generata in una clausola filter, il runtime rileva l'eccezione automaticamente.Tale circostanza complica il rilevamento e il debug dell'errore originale.

CA2220: I finalizzatori devono chiamare il finalizzatore della classe base

La finalizzazione deve essere propagata tramite la gerarchia di ereditarietà.A tale scopo, i tipi devono chiamare il metodo Finalize della classe di base nel proprio metodo Finalize.

CA2221: I finalizzatori devono essere protetti

I finalizzatori devono utilizzare il modificatore di accesso a livello di famiglia.

CA2222: Non diminuire la visibilità di membri ereditati

Non modificare il modificatore di accesso per i membri ereditati.La modifica in privato di un membro ereditato non impedisce ai chiamanti di accedere all'implementazione della classe base del metodo.

CA2223: La differenza tra membri non deve limitarsi al tipo restituito

Nonostante Common Language Runtime consenta l'utilizzo di tipi restituiti per differenziare membri altrimenti identici, questa funzionalità non è inclusa nella specifica CLS (Common Language Specification) e non è una funzionalità comune dei linguaggi di programmazione .NET.

CA2224: Eseguire l'override di Equals all'override dell'operatore

Un tipo pubblico implementa l'operatore di uguaglianza, ma non esegue l'override di 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 accesso alla stessa funzionalità dell'operatore e viene fornito per gli 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 di 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.

CA2228: Non fornire formati di risorse non rilasciati

Con le versioni supportate di .NET Framework potrebbe non essere possibile utilizzare i file di risorse compilati utilizzando versioni provvisorie di .NET Framework.

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.

CA2230: Utilizzare params per argomenti variabili

Un tipo pubblico o protetto contiene un metodo pubblico o protetto che utilizza la convenzione di chiamata VarArgs anziché la parola chiave params.

CA2231: Eseguire l'overload dell'operatore "uguale a" all'override di ValueType.Equals

Un tipo di valore esegue l'override di Object.Equals, ma non implementa l'operatore di uguaglianza.

CA2232: Contrassegnare i punti di ingresso del Windows Form con STAThread

STAThreadAttribute indica che il modello di threading COM per l'applicazione è un apartment a thread singolo.Questo attributo deve essere presente sul punto di ingresso di qualsiasi applicazione che utilizza Windows Form; se omesso è possibile che il componente Windows non funzioni correttamente.

CA2233: Evitare l'overflow delle operazioni

Le operazioni aritmetiche non devono essere eseguite senza prima convalidare gli operandi, per assicurarsi che il risultato dell'operazione sia compreso nell'intervallo dei valori possibili per i tipi di dati utilizzati.

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 parametro System.Uri.

CA2235: Contrassegnare tutti i campi non serializzabili

Un campo di istanza di un tipo non serializzabile viene dichiarato in un tipo serializzabile.

CA2236: Chiamare metodi della classe base su tipi ISerializable

Per correggere una violazione di questa regola, chiamare il costruttore di serializzazione o il metodo GetObjectData del tipo di base dal costruttore o dal metodo del tipo derivato corrispondente.

CA2237: Contrassegnare i tipi ISerializable con SerializableAttribute

Affinché i tipi vengano riconosciuti come serializzabili in Common Language Runtime, è necessario che siano contrassegnati con l'attributo SerializableAttribute anche se il tipo utilizza una routine di serializzazione personalizzata tramite l'implementazione dell'interfaccia ISerializable.

CA2238: Implementare correttamente i metodi di serializzazione

Un metodo che gestisce un evento di serializzazione non dispone della visibilità, del tipo restituito o della firma corretta.

CA2239: Fornire metodi di deserializzazione per i campi facoltativi

Un tipo include un campo contrassegnato con l'attributo System.Runtime.Serialization.OptionalFieldAttribute e il tipo non fornisce metodi di gestione degli eventi di deserializzazione.

CA2240: Implementare ISerializable in modo corretto

Per correggere una violazione di questa regola, impostare il metodo GetObjectData come visibile e sottoponibile a override e accertarsi che tutti i campi di istanza siano inclusi nel processo di serializzazione o contrassegnati in modo esplicito con l'attributo NonSerializedAttribute.

CA2241: Fornire argomenti corretti ai metodi di formattazione

L'argomento format passato a System.String.Format non contiene un elemento di formato corrispondente a ogni argomento dell'oggetto o viceversa.

CA2242: Testare i valori NaN in modo corretto

Questa espressione consente di testare un valore rispetto a Single.Nan o Double.Nan.Utilizzare Single.IsNan(Single) o Double.IsNan(Double) per testare il valore.

CA2243: Valori letterali stringa di attributo devono essere analizzate correttamente

Il parametro del valore letterale stringa di un attributo non esegue l'analisi corretta di un URL, un GUID o una versione.