Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra gli errori del compilatore seguenti:
- CS0193: l'operatore * o -> deve essere applicato a un puntatore dati
- CS0196: un puntatore deve essere indicizzato da un solo valore
- CS0208: Impossibile ottenere l'indirizzo, le dimensioni o dichiarare un puntatore a un tipo gestito ('tipo')
- CS0209: il tipo di locale dichiarato in un'istruzione fissa deve essere un tipo di puntatore
-
CS0210: è necessario fornire un inizializzatore in una dichiarazione fissa o
usingdi istruzione - CS0211: Impossibile accettare l'indirizzo dell'espressione specificata
- CS0212: è possibile accettare solo l'indirizzo di un'espressione senza prefisso all'interno di un inizializzatore di istruzioni fisse
- CS0213: Non è possibile usare l'istruzione 'fixed' per ottenere l'indirizzo di un'espressione già fissa
- CS0214: i puntatori e i buffer a dimensione fissa possono essere usati solo in un contesto non sicuro
- CS0227: Il codice unsafe può apparire solo se compilato con /unsafe
- CS0233: 'identifier' non ha una dimensione predefinita, pertanto sizeof può essere usato solo in un contesto non sicuro
- CS0242: l'operazione in questione non è definita sui puntatori void
-
CS0244: né '
is' né 'as' sono validi per i tipi di puntatore - CS0254: il lato destro di un'assegnazione di istruzione fissa potrebbe non essere un'espressione cast
- CS0459: Impossibile accettare l'indirizzo di una variabile locale di sola lettura
- CS0821: Le variabili locali tipizzate in modo implicito non possono essere corrette
- CS1641: un campo buffer a dimensione fissa deve avere l'identificatore delle dimensioni della matrice dopo il nome del campo
- CS1642: i campi del buffer a dimensione fissa possono essere solo membri di struct.
- CS1656: Impossibile assegnare a 'variable' perché è un tipo di variabile di sola lettura
-
CS1663: il tipo di buffer a dimensione fissa deve essere uno dei seguenti:
bool,byteshortintlong,char,sbyteushortuintulong, ofloatdouble - CS1665: i buffer a dimensione fissa devono avere una lunghezza maggiore di zero
- CS1666: non è possibile usare buffer a dimensione fissa contenuti in espressioni senza prefisso. Provare a usare l'istruzione fixed.
- CS1708: è possibile accedere ai buffer a dimensione fissa solo tramite variabili locali o campi
-
CS1716: non usare l'attributo '
System.Runtime.CompilerServices.FixedBuffer'. Usare invece il modificatore di campo 'fixed'. - CS1919: impossibile usare il tipo non sicuro 'type name' nella creazione di oggetti.
-
CS4004: Impossibile
awaitin un contesto non sicuro -
CS8812: impossibile convertire
&Methodil gruppo in un tipo di puntatore non a funzione. -
CS9123: l'operatore '
&' non deve essere usato nei parametri o nelle variabili locali nei metodi asincroni.
Operazioni del puntatore e dereferenziazione
-
CS0193: l'operatore
*o->deve essere applicato a un puntatore dati - CS0196: un puntatore deve essere indicizzato da un solo valore
- CS0242: l'operazione in questione non è definita sui puntatori void
Per usare correttamente le operazioni del puntatore, seguire le regole per la dereferenziazione, l'indicizzazione e le operazioni aritmetiche. Per altre informazioni, vedere Tipi di puntatore e puntatori a funzione.
- Applicare l'operatore
*o->solo ai puntatori dati (CS0193). Non usare questi operatori con tipi non puntatore o con puntatori a funzione. I puntatori a funzione non possono essere dereferenziati in C#, a differenza di C/C++. - Puntatori all'indice con un solo valore (CS0196). L'indicizzazione multidimensionale non è supportata nei puntatori.
- Evitare operazioni non predefinite sui puntatori void (CS0242). Ad esempio, non incrementare un puntatore void perché il compilatore non conosce la dimensione dei dati a cui punta.
Tipi di puntatore e tipi gestiti
- CS0208: impossibile accettare l'indirizzo di , ottenere le dimensioni o dichiarare un puntatore a un tipo gestito ('type')
- CS0233: 'identifier' non ha una dimensione predefinita, pertanto sizeof può essere usato solo in un contesto non sicuro
Per usare correttamente i puntatori e l'operatore sizeof , usare tipi non gestiti e contesti appropriati. Per altre informazioni, vedere Tipi non gestiti e l'operatoresizeof .
- Usare puntatori solo con tipi non gestiti (CS0208). Non prendere l'indirizzo di, non calcolare le dimensioni di, o dichiarare puntatori ai tipi gestiti. I tipi gestiti includono tipi di riferimento e struct che contengono campi o proprietà di tipo riferimento.
- Usare l'operatore
sizeofall'interno di ununsafecontesto quando si usano tipi le cui dimensioni non sono una costante in fase di compilazione (CS0233).
Buffer fissi
- CS0209: il tipo di locale dichiarato in un'istruzione fissa deve essere un tipo di puntatore
-
CS0210: è necessario fornire un inizializzatore in una dichiarazione fissa o
usingdi istruzione - CS0211: Impossibile accettare l'indirizzo dell'espressione specificata
- CS0212: è possibile accettare solo l'indirizzo di un'espressione senza prefisso all'interno di un inizializzatore di istruzioni fisse
- CS0213: Non è possibile usare l'istruzione fixed per prendere l'indirizzo di un'espressione già fissata
- CS0254: il lato destro di un'assegnazione di istruzione fissa potrebbe non essere un'espressione cast
- CS0459: Impossibile accettare l'indirizzo di una variabile locale di sola lettura
- CS0821: Le variabili locali tipizzate in modo implicito non possono essere corrette
- CS1656: Impossibile assegnare a 'variable' perché è un tipo di variabile di sola lettura
Questi errori si verificano quando si usa l'istruzionefixed in modo non corretto. L'istruzione fixed impedisce al Garbage Collector di spostare una variabile mobile e dichiara un puntatore a tale variabile. Per altre informazioni, vedere Codice e puntatori unsafe.
Per usare correttamente l'istruzione fixed :
- Dichiarare la variabile come tipo di puntatore (CS0209).
- Specificare un inizializzatore nella dichiarazione dell'istruzione
fixed(CS0210). - Prendere l'indirizzo solo per espressioni valide: campi, variabili locali e indirezione del puntatore (CS0211). Non prendere l'indirizzo delle espressioni calcolate come la somma di due variabili.
- Usare l'operatore address-of su espressioni non fisse solo all'interno dell'inizializzatore di dichiarazione
fixed(CS0212). - Non usare un'istruzione
fixednelle espressioni già fisse (CS0213). Le variabili e i parametri locali in ununsafemetodo sono già fissi nello stack. - Non usare espressioni di cast sul lato destro di un'assegnazione di istruzione
fixed(CS0254). - Non prendere l'indirizzo delle variabili locali a sola lettura (CS0459). Le variabili nei
foreachcicli, nelleusingistruzioni e nellefixedistruzioni sono di sola lettura. - Usare tipi espliciti anziché
varinfixedistruzioni (CS0821). - Non attribuire a variabili in contesti di sola lettura come
foreachcicli,usingdichiarazioni ofixedistruzioni (CS1656).
Restrizioni di contesto non sicure
- CS0214: i puntatori e i buffer a dimensione fissa possono essere usati solo in un contesto non sicuro
- CS0227: Il codice unsafe può essere visualizzato solo se viene compilato con /unsafe
- CS0244: né 'is' né 'as' sono validi per i tipi di puntatore
- CS1919: Impossibile usare il tipo non sicuro 'type name' nella creazione di oggetti
- CS4004: Impossibile attendere in un contesto non sicuro
- CS9123: L'operatore '&' non deve essere usato nei parametri o nelle variabili locali nei metodi asincroni
Questi errori si verificano quando si usano costrutti di codice non sicuri senza contesto non sicuro appropriato o quando si tentano operazioni non consentite nel codice non sicuro. Per ulteriori informazioni, vedere Codice non sicuro e puntatori e la parola chiave unsafe.
Per usare correttamente il codice unsafe:
- Contrassegnare metodi, tipi o blocchi di codice che usano puntatori o buffer a dimensione fissa con la
unsafeparola chiave (CS0214). - Abilitare l'opzione del compilatore AllowUnsafeBlocks nelle impostazioni del progetto quando si usa la
unsafeparola chiave (CS0227). - Non usare gli operatori
isoascon tipi di puntatore (CS0244). Questi operatori di test dei tipi non sono validi per i puntatori. - Non usare l'operatore
newper creare istanze del tipo di puntatore (CS1919). Per creare oggetti in memoria non gestita, usare l'interoperabilità per chiamare metodi nativi che restituiscono puntatori. - Mantenere il codice unsafe separato dal codice asincrono (CS4004). Creare metodi separati per le operazioni non sicure e chiamarli da metodi asincroni.
- Non usare l'operatore address-of (
&) nei parametri o nelle variabili locali nei metodi asincroni (CS9123). La variabile potrebbe non esistere al termine dell'operazione asincrona.
Buffer a dimensione fissa
- CS1641: un campo buffer a dimensione fissa deve avere l'identificatore delle dimensioni della matrice dopo il nome del campo
- CS1642: i campi del buffer a dimensione fissa possono essere solo membri di struct
- CS1663: il tipo di buffer a dimensione fissa deve essere uno dei seguenti: bool, byte, short, int, long, char, sbyte, ushort, uint, ulong, float o double
- CS1665: i buffer a dimensione fissa devono avere una lunghezza maggiore di zero
- CS1666: non è possibile usare buffer a dimensione fissa contenuti in espressioni senza prefisso. Provare a usare l'istruzione fixed
- CS1708: è possibile accedere ai buffer a dimensione fissa solo tramite variabili locali o campi
- CS1716: non usare l'attributo 'System.Runtime.CompilerServices.FixedBuffer'. Usare invece il modificatore di campo 'fixed'
Questi errori si verificano quando si lavora con buffer a dimensione fissa. I buffer a dimensione fissa sono matrici incorporate direttamente negli struct e vengono usate principalmente per gli scenari di interoperabilità. Per altre informazioni, vedere Buffer a dimensione fissa.
Per dichiarare e usare correttamente buffer a dimensione fissa:
- Specificare le dimensioni della matrice dopo il nome del campo usando una costante integer positivo (CS1641, CS1665).
- Dichiarare buffer a dimensione fissa solo in struct, non nelle classi (CS1642). Usare un array regolare se è necessario il campo in una classe.
- Usare uno dei tipi di elemento supportati:
bool,byteshort, ,int,long,charsbyteushortuintulongfloat, odouble(CS1663). - Usare un'istruzione
fixedper fissare la struct contenitore prima di accedere al buffer (CS1666). - Accedere ai buffer a dimensione fissa solo tramite variabili locali o campi, non tramite espressioni intermedie (CS1708).
- Usare il
fixedmodificatore di campo anziché l'attributoSystem.Runtime.CompilerServices.FixedBuffer(CS1716).
Puntatori di funzione
-
CS8812: Impossibile convertire
&Methodil gruppo in un tipo di puntatore non a funzione
Per ottenere un puntatore a funzione, usare l'operatore address-of con un cast esplicito del tipo di puntatore a funzione. Non utilizzare l'operatore address-of & per assegnare gruppi di metodi a void* o ad altri tipi che non siano puntatori a funzione. Per altre informazioni, vedere Puntatori a funzioni.