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:
- CS0181: il parametro del costruttore dell'attributo 'parameter' ha tipo 'type', che non è un tipo di parametro di attributo valido
- CS0243: l'attributo Conditional non è valido in 'method' perché è un metodo di override
- CS0404: l'attributo non è valido in questo tipo di dichiarazione.
- CS0415: L'attributo 'attribute' è valido solo per un indicizzatore che non è una dichiarazione esplicita di un membro dell'interfaccia
- CS0416: 'type parameter': un argomento di attributo non può usare parametri di tipo
- CS0447: l'attributo non può essere usato con argomenti di tipo.
- CS0577: l'attributo Conditional non è valido su 'method' perché è un costruttore, un distruttore, un operatore, un'espressione lambda o un'implementazione esplicita dell'interfaccia
- CS0578: l'attributo Conditional non è valido per 'function' perché il tipo restituito non è void
- CS0579: attributo 'attribute' duplicato
- CS0582: l'attributo condizionale non è valido nei membri dell'interfaccia
- CS0592: l'attributo 'attribute' non è valido per questo tipo di dichiarazione. È valido solo nelle dichiarazioni 'declaration'.
- CS0609: impossibile impostare l'attributo su un indicizzatore contrassegnato come override.
- CS0616: 'Type' non è una classe di attributi
- CS0625: 'field': campo dell'istanza nei tipi contrassegnati con StructLayout(LayoutKind.Explicit) deve avere un attributo FieldOffset
- CS0629: Il membro condizionale 'member' non può implementare il membro dell'interfaccia 'base class member' nel tipo 'Type Name'
- CS0636: l'attributo FieldOffset può essere inserito solo su membri di tipi contrassegnati con StructLayout(LayoutKind.Explicit)
- CS0637: l'attributo FieldOffset non è consentito nei campi statici o const
- CS0641: L'attributo 'attribute' è valido solo per le classi derivate da System.Attribute
- CS0646: Impossibile specificare l'attributo DefaultMember in un tipo contenente un indicizzatore
- CS0647: Errore durante l'emissione dell'attributo
- CS0653: Impossibile applicare la classe di attributi 'class' perché è astratta
- CS0657: 'Location' non è una posizione dell'attributo valida per questa dichiarazione. Le posizioni dell'attributo valide per questa dichiarazione sono "posizioni valide". Tutti gli attributi in questo blocco verranno ignorati.
- CS0658: 'Location' non è una posizione dell'attributo consentita riconosciuta. Le posizioni valide per gli attributi per questa dichiarazione sono "percorsi validi". Tutti gli attributi in questo blocco verranno ignorati.
- CS0668: due indicizzatori hanno nomi diversi. L'attributo IndexerName deve essere usato con lo stesso nome in ogni indicizzatore all'interno di un tipo
- CS0685: Il membro condizionato 'member' non può avere un parametro out
- CS0735: tipo non valido specificato come argomento per l'attributo TypeForwardedTo
- CS0739: 'type' duplicate TypeForwardedToAttribute
- CS1608: L'attributo RequiredAttribute non è consentito nei tipi C#
- CS1614: 'name' è ambiguo tra 'attribute' e 'other attribute'. Usare '@name' o includere in modo esplicito il suffisso 'Attribute'.
- CS1618: Non è possibile creare un delegato con 'method' perché esso o un metodo di cui esegue l'override ha un attributo Conditional
- CS1667: L'attributo 'attribute' non è valido nei metodi di accesso alle proprietà o agli eventi. È valido solo nelle dichiarazioni 'declaration'.
- CS1689: l'attributo 'attribute' è valido solo per metodi o classi di attributi
- CS7014: gli attributi non sono validi in questo contesto.
- CS7046: è necessario specificare il parametro di attributo 'parameter'.
- CS7047: è necessario specificare il parametro di attributo 'parameter1' o 'parameter2'.
- CS7067: il parametro del costruttore dell'attributo 'parameter' è facoltativo, ma non è stato specificato alcun valore di parametro predefinito.
- CS7080: L'attributo CallerMemberNameAttribute applicato al parametro 'parameter name' non avrà alcun effetto. Viene sottoposto a override da CallerFilePathAttribute.
- CS7081: L'attributo CallerMemberNameAttribute applicato al parametro 'parameter name' non avrà alcun effetto. È sottoposto a override da CallerLineNumberAttribute.
- CS7082: L'attributo CallerFilePathAttribute applicato al parametro 'parameter name' non avrà alcun effetto. È sovrascritto da CallerLineNumberAttribute.
- CS8335: non usare 'nome attributo'. Questa operazione è riservata all'utilizzo del compilatore.
- CS8336: il nome di tipo 'type' è riservato per essere usato dal compilatore.
- CS8423: l'attributo 'attribute' non è valido nelle funzioni di accesso agli eventi. È valida solo nelle dichiarazioni 'declaration'.
- CS8783: la funzione locale 'method' deve essere 'static' per usare l'attributo Conditional
- CS8959: Impossibile applicare CallerArgumentExpressionAttribute perché non sono presenti conversioni standard dal tipo 'type1' al tipo 'type2'
- CS8960: L'attributo CallerArgumentExpressionAttribute applicato al parametro 'parameter' non avrà alcun effetto. È sostituito da CallerLineNumberAttribute.
- CS8961: L'attributo CallerArgumentExpressionAttribute applicato al parametro 'parameter' non avrà alcun effetto. Viene sottoposto a override da CallerFilePathAttribute.
- CS8962: L'attributo CallerArgumentExpressionAttribute applicato al parametro 'parameter' non avrà alcun effetto. Viene sottoposto a override da CallerMemberNameAttribute.
- CS8963: CallerArgumentExpressionAttribute applicato al parametro 'parameter' non avrà alcun effetto. Viene applicato con un nome di parametro non valido.
- CS8968: 'type parameter': un argomento di tipo dell'attributo non può usare parametri di tipo
- CS8970: il tipo 'type' non può essere usato in questo contesto perché non può essere rappresentato nei metadati.
- CS9331: 'attribute' non può essere applicato manualmente.
- CS9351: l'uso di 'StructLayoutAttribute' e 'ExtendedLayoutAttribute' nello stesso tipo non è consentito.
Argomenti e parametri degli attributi
Quando si usano argomenti di attributo o parametri in modo non corretto, vengono visualizzati gli errori seguenti:
- CS0181: il parametro del costruttore dell'attributo 'parameter' ha tipo 'type', che non è un tipo di parametro di attributo valido
- CS0416: 'type parameter': un argomento di attributo non può usare parametri di tipo
- CS0447: l'attributo non può essere usato con argomenti di tipo.
- CS0647: Errore nell'emissione dell'attributo
- CS7046: è necessario specificare il parametro di attributo 'parameter'.
- CS7047: è necessario specificare il parametro di attributo 'parameter1' o 'parameter2'.
- CS7067: il parametro del costruttore dell'attributo 'parameter' è facoltativo, ma non è stato specificato alcun valore di parametro predefinito.
- CS8968: 'type parameter': un argomento di tipo attributo non può usare parametri di tipo
- CS8970: il tipo 'type' non può essere usato in questo contesto perché non può essere rappresentato nei metadati.
Per correggere questi errori, attenersi alle regole seguenti:
- I parametri del costruttore di attributi devono usare tipi di parametro di attributo validi (CS0181). La specifica del linguaggio C# limita i tipi di parametro dell'attributo ai tipi primitivi (
bool,byte,char,double,float,int,long,shortestring),object,System.Type, i tipi di enumerazione e le matrici unidimensionali di questi tipi. I puntatori a funzione e altri tipi che non possono essere rappresentati nei metadati non sono tipi di parametri di attributo validi. - Gli argomenti degli attributi devono essere valori costanti in fase di compilazione, pertanto non è possibile usare i parametri di tipo come argomenti di attributo (CS0416). Il compilatore deve risolvere gli argomenti dell'attributo in fase di compilazione e i parametri di tipo non sono noti fino a quando non viene costruito il tipo generico.
- Non è possibile applicare argomenti di tipo a un attributo non generico (CS0447). Se una classe di attributi non è generica, l'utilizzo non può includere argomenti di tipo tra parentesi angolari.
- Tutti i valori passati a un costruttore di attributi devono essere formattati correttamente e all'interno dell'intervallo valido per ogni parametro (CS0647). Ad esempio, un oggetto GuidAttribute richiede una stringa di formato GUID valida.
- Quando si applica l'attributo (CS7046, CS7047, CS7047), è necessario specificare tutti i parametri di attributo obbligatori. Controllare la firma del costruttore dell'attributo per determinare quali parametri sono obbligatori e specificare argomenti validi per ogni parametro.
- Quando si definisce un attributo personalizzato con parametri di costruttore facoltativi, specificare i valori predefiniti per tali parametri (CS7067). Usare la sintassi
parameterType parameterName = defaultValuenel costruttore dell'attributo in modo che i chiamanti possano omettere tali argomenti. - Gli argomenti del tipo di attributo generico devono essere tipi concreti, non parametri di tipo (CS8968). Il compilatore deve determinare completamente gli argomenti del tipo di attributo generico in fase di compilazione, pertanto i parametri di tipo aperto non sono consentiti.
- I tipi usati come argomenti di attributo devono essere rappresentabili nei metadati (CS8970). Alcuni tipi costruiti, ad esempio quelli che coinvolgono
dynamico determinati nomi di elementi di tupla, non possono essere codificati nei metadati e non sono consentiti come argomenti di tipo attributo.
Per ulteriori informazioni, fare riferimento ad Attributi, Generics e alla sezione della specifica del linguaggio C# sugli attributi.
Annotazioni
CS0404, CS0447, CS0609 e CS0647 sono diagnostiche storiche. Il compilatore corrente non genera questi errori.
Requisiti delle classi degli attributi
Quando si definiscono classi di attributi che non soddisfano i vincoli necessari, vengono visualizzati gli errori seguenti:
- CS0404: l'attributo non è valido in questo tipo di dichiarazione.
- CS0579: attributo 'attribute' duplicato
- CS0616: 'Type' non è una classe di attributi
- CS0641: l'attributo 'attribute' è valido solo nelle classi derivate da System.Attribute
- CS0653: Impossibile applicare la classe di attributi 'class' perché è astratta
- CS1614: 'name' è ambiguo tra 'attribute' e 'other attribute'. Usare "@name" o includere in modo esplicito il suffisso 'Attribute'.
Per correggere questi errori, attenersi alle regole seguenti:
- Applicare attributi solo ai tipi di dichiarazione consentiti dall'attributo AttributeUsageAttribute (CS0404). Controllare il
AttributeTargetsvalore specificato nell'attributoAttributeUsageper vedere quali destinazioni sono valide. - Se si applica lo stesso attributo più di una volta a una singola destinazione, rimuovere il duplicato o impostare
AllowMultiple = truenell'attributo AttributeUsageAttribute (CS0579). Per impostazione predefinita, gli attributi possono essere visualizzati una sola volta su ogni destinazione. - Il tipo usato nella sintassi degli attributi deve ereditare da System.Attribute (CS0616). Solo le classi derivate da
System.Attributepossono essere usate come attributi. Altri tipi causano questo errore anche se hanno un nome simile. - È possibile applicare AttributeUsageAttribute solo alle classi che derivano da
Attribute(CS0641). L'attributo controlla laAttributeUsagemodalità di utilizzo di altri attributi e si limita alle classi di attributi. - Le classi di attributi non possono essere
abstractperché il compilatore deve crearne un'istanza (CS0653). Rimuovere il modificatore dalla classe dell'attributoabstracto derivare una classe concreta dalla base astratta. - Quando esistono entrambe
Examplele classi di attributi eExampleAttribute, il compilatore non è in grado di determinare a quale[Example]si riferisce (CS1614). Disambiguare usando[@Example]per il nome più breve o[ExampleAttribute]per il nome più lungo.
Per altre informazioni, vedere Creare attributi personalizzati e la sezione Specifica del linguaggio C# sugli attributi.
Contesto della posizione dell'attributo
Gli errori seguenti si verificano quando si applicano attributi in posizioni non valide o si usano identificatori di destinazione non corretti:
- CS0592: l'attributo 'attribute' non è valido in questo tipo di dichiarazione. È valido solo nelle dichiarazioni 'declaration'.
- CS0657: 'Location' non è una posizione dell'attributo valida per questa dichiarazione. Le posizioni dell'attributo valide per questa dichiarazione sono "posizioni valide". Tutti gli attributi in questo blocco verranno ignorati.
- CS0658: 'Location' non è una destinazione dell'attributo riconosciuta. Le destinazioni dell'attributo valide per questa dichiarazione sono "percorsi validi". Tutti gli attributi in questo blocco verranno ignorati.
- CS1667: L'attributo 'attribute' non è valido negli accessori di proprietà o di evento. È valido solo nelle dichiarazioni 'declaration'.
- CS7014: gli attributi non sono validi in questo contesto.
- CS8423: l'attributo 'attribute' non è valido nelle funzioni di accesso agli eventi. È valida solo nelle dichiarazioni 'declaration'.
Per correggere questi errori, seguire queste regole. Per altre informazioni, vedere Destinazioni degli attributi e la sezione Specifica del linguaggio C# sulla specifica dell'attributo.
- Ogni attributo AttributeUsageAttribute specifica i tipi di dichiarazione a cui è destinato. È necessario applicare l'attributo solo a tali tipi (CS0592). Ad esempio, non è possibile applicare un attributo definito con
AttributeTargets.Interfacea una classe. - Quando si usa un identificatore di destinazione dell'attributo,
method:ad esempio oproperty:, l'identificatore deve essere valido per la dichiarazione in cui viene visualizzata (CS0657). Controllare il messaggio di errore per vedere quali identificatori di destinazione sono consentiti per la dichiarazione specifica. - L'identificatore di destinazione dell'attributo usato non è un identificatore riconosciuto (CS0658). Gli identificatori validi includono
assembly:,module:type:,method:,property:,field:,event:,param:ereturn:. - Alcuni attributi, ad esempio ObsoleteAttribute e CLSCompliantAttribute, non sono validi per le funzioni di accesso alle proprietà o agli eventi (CS1667). Sposta l'attributo dall'accessor alla proprietà o alla dichiarazione di evento stessa.
- Gli attributi possono essere visualizzati solo sugli elementi del programma che li supportano (CS7014). Se si applicano attributi a livello di assembly o a livello di modulo, usare gli
assembly:identificatori di destinazione omodule:e inserirli all'inizio del file. - Gli attributi negli accessori dell'evento
adderemovenon sono consentiti (CS8423). Applicare l'attributo alla dichiarazione di evento oppure usare una destinazione valida,method:ad esempio oparam:in una dichiarazione che supporta tale destinazione.
Attributi predefiniti
Gli errori seguenti si verificano quando si usano attributi .NET predefiniti specifici in modo non corretto:
- CS0415: l'attributo 'attribute' è valido solo in una proprietà indicizzata che non è una dichiarazione esplicita di un membro dell'interfaccia
- CS0609: impossibile impostare l'attributo su un indicizzatore contrassegnato come override.
- CS0625: 'field': campo dell'istanza nei tipi contrassegnati con StructLayout(LayoutKind.Explicit) deve avere un attributo FieldOffset
- CS0636: l'attributo FieldOffset può essere inserito solo su membri di tipi contrassegnati con StructLayout(LayoutKind.Explicit)
- CS0637: l'attributo FieldOffset non è consentito nei campi statici o const
- CS0646: Impossibile specificare l'attributo DefaultMember in un tipo contenente un indicizzatore
- CS0668: due indicizzatori hanno nomi diversi. L'attributo IndexerName deve essere usato con lo stesso nome in ogni indicizzatore all'interno di un tipo
- CS0735: tipo non valido specificato come argomento per l'attributo TypeForwardedTo
- CS0739: 'type' duplicate TypeForwardedToAttribute
- CS1608: L'attributo RequiredAttribute non è consentito nei tipi C#
- CS9331: 'attribute' non può essere applicato manualmente.
- CS9351: l'uso di 'StructLayoutAttribute' e 'ExtendedLayoutAttribute' nello stesso tipo non è consentito.
Per correggere questi errori, seguire queste regole. Per altre informazioni, vedere Indicizzatori, Tipi di struttura, TypeForwardedToAttributecodice e puntatori non sicuri e Platform Invoke (P/Invoke).
- È possibile applicare IndexerNameAttribute solo agli indicizzatori che non sono dichiarazioni esplicite di membri dell'interfaccia (CS0415). Rimuovere l'attributo dagli indicizzatori di interfaccia espliciti, perché l'interfaccia definisce già il nome dell'indicizzatore.
- Non è possibile applicare
IndexerNameagli indicizzatori contrassegnati conoverrideperché gli indicizzatori di override ereditano il nome dalla classe di base (CS0609). Rimuovere l'attributoIndexerNamedall'indicizzatore di override. - Ogni campo di istanza in un tipo contrassegnato con
StructLayout(LayoutKind.Explicit)deve avere un FieldOffsetAttribute (CS0625). Per il layout esplicito è necessario specificare l'offset dei byte per ogni campo dell'istanza. - È possibile applicare FieldOffsetAttribute solo ai membri di tipi in cui StructLayoutAttribute è impostato su
LayoutKind.Explicit(CS0636). Aggiungere l'attributoStructLayoutalla dichiarazione di tipo contenitore. - L'attributo
FieldOffsetnon è consentito neistaticcampi oconstperché il layout esplicito si applica solo ai campi dell'istanza (CS0637). Rimuovere l'attributoFieldOffsetdal campo statico o const. - Non è possibile applicare DefaultMemberAttribute a un tipo che contiene già un indicizzatore perché il compilatore definisce automaticamente il membro predefinito per i tipi con indicizzatori (CS0646). Rimuovere l'attributo
DefaultMember. - Tutti gli IndexerNameAttribute attributi all'interno di un tipo devono specificare lo stesso nome (CS0668). Modificare i nomi in modo che corrispondano, perché il runtime usa un singolo nome per tutti gli indicizzatori in un tipo.
- È necessario specificare un tipo non generico, non annidato, non puntatore, non matrice come argomento per TypeForwardedToAttribute (CS0735). Solo i tipi denominati di primo livello sono destinazioni di inoltro valide.
- Un assembly può avere un TypeForwardedToAttribute solo per ogni tipo esterno (CS0739). Individuare e rimuovere la dichiarazione duplicata
TypeForwardedTo. - Non è possibile usare RequiredAttributeAttribute nei tipi definiti in C# (CS1608). Questo attributo è riservato ad altri linguaggi che devono forzare i compilatori a richiedere una particolare funzionalità.
- Alcuni attributi sono riservati al compilatore e non possono essere applicati manualmente nel codice sorgente (CS9331). Sostituire l'attributo con la sintassi del linguaggio C# equivalente che provoca la sua generazione da parte del compilatore.
- Non applicare entrambi StructLayoutAttribute e
ExtendedLayoutAttributeallo stesso tipo (CS9351). Questi due attributi di layout rappresentano strategie di layout che si escludono a vicenda nel modello di sicurezza della memoria aggiornato: il layout esplicito richiede unFieldOffsetoggetto in ogni campo dell'istanza, mentre il layout esteso consente al runtime di scegliere gli offset dei campi, pur richiedendo che ogni campo sia contrassegnatosafeounsafe. Rimuovere uno dei due attributi dalla dichiarazione di tipo.
Attributi e tipi riservati dal compilatore
Gli errori seguenti si verificano quando il codice sorgente dichiara o applica in modo esplicito nomi o attributi riservati ai metadati generati dal compilatore:
- CS8335: non usare 'nome attributo'. Questa operazione è riservata all'utilizzo del compilatore.
- CS8336: il nome di tipo 'type' è riservato per essere usato dal compilatore.
Rimuovere la dichiarazione esplicita o l'applicazione di attributi. Usare invece la funzionalità del linguaggio C# corrispondente e consentire al compilatore di generare i metadati necessari.
Utilizzo degli attributi condizionali
Quando si applicano i ConditionalAttribute metodi che violano le restrizioni di utilizzo, vengono visualizzati gli errori seguenti:
- CS0243: l'attributo Conditional non è valido per 'method' perché è un metodo di override
- CS0577: L'attributo Conditional non è valido in 'method' perché è un costruttore, un distruttore, un operatore, un'espressione lambda o un'implementazione esplicita dell'interfaccia
- CS0578: L'attributo Conditional non è valido per 'function' perché il tipo di ritorno non è void
- CS0582: l'attributo condizionale non è valido nei membri dell'interfaccia
- CS0629: Il membro condizionale 'member' non può implementare il membro dell'interfaccia 'base class member' nel tipo 'Type Name'
- CS0685: Il membro condizionale 'member' non può avere un parametro out
- CS1618: Non è possibile creare un delegato con 'method' perché esso o un metodo di cui esegue l'override ha un attributo Conditional
- CS1689: l'attributo 'attribute' è valido solo sui metodi o sulle classi di attributo
- CS8783: la funzione locale 'method' deve essere 'static' per usare l'attributo Conditional
Per correggere questi errori, seguire queste regole. Per altre informazioni, vedere ConditionalAttributeMetodi condizionali e Attributi.
- Il compilatore associa le chiamate alla dichiarazione del metodo di base, non all'override, pertanto non è possibile applicare l'attributo
Conditionalai metodi di override (CS0243). Rimuovere l'attributoConditionaldal metodo di override o rimuovere laoverrideparola chiave . - L'attributo
Conditionalnon è valido per costruttori, finalizzatori, operatori, espressioni lambda o implementazioni esplicite dell'interfaccia (CS0577). Questi tipi di membro non possono essere omessi in modo condizionale perché hanno ruoli obbligatori nel ciclo di vita o nel contratto del tipo. - I metodi condizionali devono restituire
voidperché il compilatore potrebbe omettere completamente la chiamata e nessun valore restituito sarebbe disponibile per il chiamante (CS0578). Modificare il tipo restituito del metodo invoido rimuovere l'attributoConditional. - I membri dell'interfaccia non possono essere condizionali perché tutti i membri dell'interfaccia devono essere implementati (CS0582). Rimuovere l'attributo
Conditionaldalla dichiarazione del membro dell'interfaccia. - I metodi che implementano i membri dell'interfaccia non possono essere condizionali perché il contratto di interfaccia richiede che siano presenti in tutte le compilazioni (CS0629). Rimuovere l'attributo
Conditionaldal metodo di implementazione. - I metodi condizionali non possono avere
outparametri perché il valore dellaoutvariabile non è definito quando il compilatore omette la chiamata al metodo (CS0685). Rimuovere ioutparametri dal metodo o rimuovere l'attributoConditional. - Non è possibile creare un delegato che faccia riferimento a un metodo condizionale perché il metodo potrebbe non esistere nelle compilazioni in cui il simbolo della condizione non è definito (CS1618). Rimuovere l'attributo
Conditionaldal metodo o non usarlo come destinazione del delegato. - L'attributo
Conditionalè valido solo per metodi e classi di attributi (CS1689). Non è valida in altri tipi di dichiarazione, ad esempio classi non di attributi, struct o interfacce. - Una funzione locale deve essere dichiarata
staticper usare l'attributoConditional(CS8783). Le funzioni locali non statiche acquisiscono lo stato dal metodo di inclusione e il compilatore non può omettere in modo sicuro una chiamata che potrebbe comportare variabili acquisite. Aggiungere ilstaticmodificatore alla funzione locale o rimuovere l'attributo[Conditional].
Priorità dell'attributo informazioni sul chiamante
- CS7080: L'attributo CallerMemberNameAttribute applicato al parametro 'parameter name' non avrà alcun effetto. Viene sottoposto a override da CallerFilePathAttribute.
- CS7081: L'attributo CallerMemberNameAttribute applicato al parametro 'parameter name' non avrà alcun effetto. È sostituito da CallerLineNumberAttribute.
- CS7082: CallerFilePathAttribute applicato al parametro 'parameter name' non avrà alcun effetto. Viene sovrascritto da CallerLineNumberAttribute.
Per selezionare il valore fornito per un argomento omesso, mantenere solo l'attributo previsto delle informazioni del chiamante nel parametro.
CallerLineNumber esegue l'override di (CallerMemberName) e (CallerFilePath); CallerMemberName esegue l'override di CallerFilePath (CS7080), indipendentemente dall'ordine degli attributi. Rimuovere l'attributo sovrascritto oppure rimuovere gli attributi con precedenza superiore se si desidera un valore diverso per le informazioni sul chiamante.
Per altre informazioni, vedere Attributi delle informazioni sul chiamante e Attributi caller-info nella specifica del linguaggio C#.
Utilizzo dell'attributo CallerArgumentExpression
Gli errori seguenti si verificano quando si applicano CallerArgumentExpressionAttribute in modo non corretto o in conflitto con altri attributi di informazioni sul chiamante:
- CS8959: Impossibile applicare CallerArgumentExpressionAttribute perché non sono presenti conversioni standard dal tipo 'type1' al tipo 'type2'
- CS8960: CallerArgumentExpressionAttribute applicato al parametro 'parameter' non avrà alcun effetto. È sovrascritto da CallerLineNumberAttribute.
- CS8961: L'attributo CallerArgumentExpressionAttribute applicato al parametro 'parameter' non avrà alcun effetto. È sovrascritto da CallerFilePathAttribute.
- CS8962: L'attributo CallerArgumentExpressionAttribute applicato al parametro 'parameter' non avrà alcun effetto. Viene sottoposto a override da CallerMemberNameAttribute.
- CS8963: L'attributo CallerArgumentExpressionAttribute applicato al parametro 'parameter' non avrà alcun effetto. Viene applicato con un nome di parametro non valido.
Per correggere questi errori, seguire queste regole. Per altre informazioni, vedere Attributi delle informazioni sul chiamante e CallerArgumentExpressionAttribute.
- Il parametro decorato con
CallerArgumentExpressiondeve avere un tipostringo un tipo con una conversione standard dastring, perché l'attributo inserisce unastringrappresentazione dell'espressione di argomento del chiamante (CS8959). Modificare il tipo di parametro instringo in un tipo compatibile. - L'attributo
CallerArgumentExpressionnon ha alcun effetto su un parametro che ha CallerLineNumberAttributeanche , CallerFilePathAttributeo CallerMemberNameAttribute (CS8960, CS8961, CS8962). Tali attributi di informazioni chiamante hanno la precedenza, quindi rimuovere l'attributoCallerArgumentExpressiondal parametro . - L'argomento stringa passato al
CallerArgumentExpressioncostruttore deve corrispondere al nome di un altro parametro nella stessa firma del metodo (CS8963). Se il nome del parametro viene scritto in modo errato o fa riferimento a un parametro inesistente, l'attributo non ha alcun effetto.