Condividi tramite


Errori e avvisi correlati ai metodi di estensione dichiarati con this parametri o extension blocchi

  • CS1100: Il metodo ha un modificatore di parametro 'this' che non è nel primo parametro
  • CS1101: il modificatore di parametro 'ref' non può essere usato con 'this'.
  • CS1102: il modificatore di parametro 'out' non può essere usato con 'this'.
  • CS1103: il primo parametro di un metodo di estensione non può essere di un tipo puntatore.
  • CS1105: i metodi di estensione devono essere statici.
  • CS1106: i metodi di estensione devono essere definiti in una classe statica non generica.
  • CS1109: i metodi di estensione devono essere definiti nelle classi statiche di primo livello, 'name' è una classe annidata.
  • CS1110: impossibile definire una nuova estensione perché non è possibile trovare il tipo ExtensionAttribute richiesto dal compilatore. Manca un riferimento a System.Core.dll?
  • CS1112: non usare 'ExtensionAttribute'. Usare invece la parola chiave 'this'.
  • CS1113: il metodo di estensione definito in un tipo valore non può essere usato per creare delegati.
  • CS1743: impossibile specificare un valore predefinito per il parametro 'this'.
  • CS9281: le dichiarazioni di estensione potrebbero non avere un nome.
  • CS9282: le dichiarazioni di estensione possono includere solo metodi o proprietà.
  • CS9283: le estensioni devono essere dichiarate in una classe statica non generica di primo livello.
  • CS9284: il parametro ricevitore di un'estensione non può avere un valore predefinito.
  • CS9285: un contenitore di estensioni può avere un solo parametro ricevitore.
  • CS9287: un parametro ricevitore non può avere lo stesso nome di un parametro di tipo contenitore di estensione.
  • CS9288: un parametro, una variabile locale o una funzione locale non può avere lo stesso nome di un parametro di tipo contenitore di estensione.
  • CS9289: il parametro tipo di membro ha lo stesso nome di un parametro di tipo contenitore di estensione.
  • CS9290: un parametro, una variabile locale o una funzione locale non può avere lo stesso nome di un parametro di estensione.
  • CS9291: 'value': un nome di parametro generato automaticamente è in conflitto con un nome di parametro di estensione.
  • CS9292: un parametro di tipo ha lo stesso nome di un parametro di estensione.
  • CS9293: impossibile usare un parametro di estensione in questo contesto.
  • CS9294: 'value': un nome di parametro generato automaticamente è in conflitto con un nome di parametro del tipo di estensione.
  • CS9295: il tipo esteso deve fare riferimento a tutti i parametri di tipo dichiarati dall'estensione, ma non viene fatto riferimento a un parametro di tipo.
  • CS9300: il parametro ricevitore 'ref' di un blocco di estensione deve essere un tipo valore o un tipo generico vincolato allo struct.
  • CS9301: il parametro ricevitore 'in' o 'ref readonly' dell'estensione deve essere un tipo di valore concreto (non generico).
  • CS9302: nuovo membro protetto dichiarato in un blocco di estensione.
  • CS9303: impossibile dichiarare i membri dell'istanza in un blocco di estensione con un parametro ricevitore senza nome.
  • CS9304: impossibile dichiarare funzioni di accesso init-only in un blocco di estensione.
  • CS9305: non è possibile usare modificatori nel parametro ricevitore senza nome del blocco di estensione.

Errori comuni nelle dichiarazioni di estensione

Il compilatore genera questi errori quando si violano le regole applicabili a tutte le dichiarazioni dei membri di estensione, indipendentemente dalla sintassi scelta:

  • CS1102: il modificatore di parametro 'out' non può essere usato con 'this'.
  • CS1106: i metodi di estensione devono essere definiti in una classe statica non generica.
  • CS1103: il primo parametro di un metodo di estensione non può essere di un tipo puntatore.
  • CS1109: i metodi di estensione devono essere definiti nelle classi statiche di primo livello, 'name' è una classe annidata.
  • CS1113: il metodo di estensione definito in un tipo valore non può essere usato per creare delegati.
  • CS1743: impossibile specificare un valore predefinito per il parametro 'this'.
  • CS9283: le estensioni devono essere dichiarate in una classe statica non generica di primo livello.
  • CS9284: il parametro ricevitore di un'estensione non può avere un valore predefinito.
  • CS9285: un contenitore di estensioni può avere un solo parametro ricevitore.

Qualsiasi dichiarazione di estensione deve seguire queste regole:

  • Il tipo contenitore (class o struct) deve essere non generico e static.
  • Il tipo che lo contiene deve essere un tipo di primo livello. Non può essere annidata in un altro tipo.
  • I membri che estendono un'istanza di un tipo di valore non possono essere convertiti in delegati.
  • Il parametro ricevitore non può includere il modificatore di out parametro.
  • Il parametro receiver non può avere un valore di argomento predefinito.
  • Non è possibile estendere i tipi di puntatore. In altre parole, il parametro a cui si applica il this modificatore non può essere un tipo di puntatore.

Questi errori sono specifici dei blocchi di estensione, una funzionalità C# 14. I blocchi di estensione vengono dichiarati usando la extension parola chiave in una classe statica. extension Dichiara il tipo e il nome del ricevitore. Tutti i membri all'interno del blocco dichiarato con extension sono membri di estensione per tale ricevitore:

  • CS9281: le dichiarazioni di estensione potrebbero non avere un nome.
  • CS9282: le dichiarazioni di estensione possono includere solo metodi o proprietà.
  • CS9287: un parametro ricevitore non può avere lo stesso nome di un parametro di tipo contenitore di estensione.
  • CS9288: un parametro, una variabile locale o una funzione locale non può avere lo stesso nome di un parametro di tipo contenitore di estensione.
  • CS9289: il parametro tipo di membro ha lo stesso nome di un parametro di tipo contenitore di estensione.
  • CS9290: un parametro, una variabile locale o una funzione locale non può avere lo stesso nome di un parametro di estensione.
  • CS9291: 'value': un nome di parametro generato automaticamente è in conflitto con un nome di parametro di estensione.
  • CS9292: un parametro di tipo ha lo stesso nome di un parametro di estensione.
  • CS9293: impossibile usare un parametro di estensione in questo contesto.
  • CS9294: 'value': un nome di parametro generato automaticamente è in conflitto con un nome di parametro del tipo di estensione.
  • CS9295: il tipo esteso deve fare riferimento a tutti i parametri di tipo dichiarati dall'estensione, ma non viene fatto riferimento a un parametro di tipo.
  • CS9300: il parametro ricevitore 'ref' di un blocco di estensione deve essere un tipo valore o un tipo generico vincolato allo struct.
  • CS9301: il parametro ricevitore 'in' o 'ref readonly' dell'estensione deve essere un tipo di valore concreto (non generico).
  • CS9302: nuovo membro protetto dichiarato in un blocco di estensione.
  • CS9303: impossibile dichiarare i membri dell'istanza in un blocco di estensione con un parametro ricevitore senza nome.
  • CS9304: impossibile dichiarare funzioni di accesso init-only in un blocco di estensione.
  • CS9305: non è possibile usare modificatori sul parametro ricevitore senza nome del blocco di estensione.

Le dichiarazioni di estensione devono seguire queste regole:

  • L'estensione non può includere un token del nome. L'estensione dichiara unicamente il ricevitore.
  • Il parametro ricevitore non può avere un valore predefinito.

I membri dell'estensione dichiarati in un blocco di estensione devono seguire queste regole, oltre alle regole comuni:

  • Solo i metodi e le proprietà sono tipi di membri di estensione validi. I membri dell'estensione possono estendere un'istanza o un tipo.
  • L'estensione deve fornire un nome di parametro per il ricevitore, affinché possa contenere membri che estendono un'istanza.
  • Il nome del parametro del ricevitore deve essere univoco in tale blocco di estensione.
  • Tutti i membri dell'estensione devono usare tutti i parametri di tipo dichiarati nell'estensione. Possono aggiungere altri parametri di tipo.

Questi errori sono specifici dei metodi di estensione in cui si dichiara il ricevitore aggiungendo il this modificatore al primo parametro del metodo :

  • CS1100: Il metodo ha un modificatore di parametro 'this' che non è nel primo parametro
  • CS1101: il modificatore di parametro 'ref' non può essere usato con 'this'.
  • CS1105: i metodi di estensione devono essere statici.
  • CS1110: impossibile definire una nuova estensione perché non è possibile trovare il tipo ExtensionAttribute richiesto dal compilatore. Manca un riferimento a System.Core.dll?
  • CS1112: non usare 'ExtensionAttribute'. Usare invece la parola chiave 'this'.

Un metodo di estensione in cui l'istanza del ricevitore include il this modificatore deve seguire queste regole, oltre alle regole comuni:

  • Il metodo deve avere il static modificatore.
  • Il this modificatore di parametro deve essere applicato al primo parametro. Non può essere applicato ad altri parametri nel metodo .
  • Il refout modificatore di parametro non può essere applicato al primo parametro. Per applicare ref, è necessario convertire in un blocco di estensione.
  • Nelle app .NET Framework, System.Core.dll deve essere aggiunto come riferimento.
  • È necessario specificare il this modificatore nel primo parametro. Non è invece possibile usare direttamente l'attributo ExtensionAttribute .