Condividi tramite


Errori e avvisi correlati al modificatore di params sui parametri del metodo

Esistono alcuni errori correlati all'istruzione lock e alla sincronizzazione dei thread:

  • CS0225: Il parametro params deve essere una matrice unidimensionale o avere un tipo di raccolta valido
  • CS0231: Il parametro params deve essere l'ultimo in un elenco di parametri formali.
  • CS0466: 'method1' non deve contenere un parametro params perché 'method2' non ne ha
  • CS0674: Non usare System.ParamArrayAttribute o System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute. Usare invece la parola chiave params.
  • CS0758: Entrambe le dichiarazioni di metodo parziale devono usare un parametro params, altrimenti nessuna delle due potrà usare un parametro params
  • CS1104: Non è possibile usare una matrice di parametri con il modificatore this in un metodo di estensione.
  • CS1611: Il parametro params non può essere dichiarato come in ref o out
  • CS1670: params non valido nel contesto corrente
  • CS1751: Impossibile specificare un valore predefinito per una matrice di parametri.
  • CS9218: Gli argomenti di tipo per il metodo non possono essere dedotti dall'uso, perché viene utilizzato un argomento di tipo dinamico e il metodo dispone di un parametro di raccolta dei params non matrice. Provare a specificare gli argomenti di tipo in modo esplicito.
  • CS9223: Creazione di una raccolta params genera una catena infinita di chiamate del costruttore.
  • CS9224: Il metodo non può essere meno visibile del membro con raccolta params.
  • CS9225: Il costruttore lascia il membro richiesto non inizializzato.
  • CS9227: Il tipo non contiene una definizione per un metodo di Add di istanza appropriato.
  • CS9228: Tipo di raccolta params non matrice deve avere un costruttore applicabile che può essere chiamato senza argomenti.

Regole di dichiarazione del metodo

I seguenti errori indicano l'uso di un modificatore params su un parametro quando il modificatore params non è consentito in tale contesto:

  • CS0231: Il parametro params deve essere l'ultimo in un elenco di parametri formali.
  • CS1104: Non è possibile usare una matrice di parametri con il modificatore this in un metodo di estensione.
  • CS1611: Il parametro params non può essere dichiarato come in ref o out
  • CS1670: params non valido nel contesto corrente
  • CS1751: Impossibile specificare un valore predefinito per una matrice di parametri.

Il compilatore applica le regole seguenti all'uso del modificatore params su un parametro del metodo:

  • Il modificatore params è consentito solo sull'ultimo parametro in un elenco di parametri formali. Sono inclusi tutti i parametri con un valore predefinito.
  • Non è possibile includere un argomento predefinito per il parametro quando viene usato il modificatore params.
  • Il modificatore params non può essere applicato al parametro per riferimento. Un parametro di riferimento è uno con il modificatore in, ref readonly, ref o out.
  • Il modificatore params non può essere combinato con il modificatore this in un metodo di estensione.
  • Il modificatore params non può essere usato in un operatore di overload.

Nelle versioni precedenti a C# 12, il modificatore params non può essere usato nel parametro di un metodo anonimo o di un'espressione lambda.

Regole del tipo di parametro e di argomento

Gli errori seguenti indicano che il tipo del parametro usato con params non è valido:

  • CS9218: Gli argomenti di tipo per il metodo non possono essere dedotti dall'uso, perché viene utilizzato un argomento di tipo dinamico e il metodo dispone di un parametro di raccolta dei params non matrice. Provare a specificare gli argomenti di tipo in modo esplicito.
  • CS0225: Il parametro params deve essere una matrice unidimensionale o avere un tipo di raccolta valido
  • CS9227: Il tipo non contiene una definizione per un metodo di Add di istanza appropriato.
  • CS9228: Tipo di raccolta params non matrice deve avere un costruttore applicabile che può essere chiamato senza argomenti.

Nelle versioni precedenti a C# 13, il modificatore params è consentito solo in matrici unidimensionali. Nessun altro tipo era valido.

A partire da C# 13 è possibile usare qualsiasi tipo di raccolta valido. Tuttavia, rimangono alcune restrizioni. Il tipo di raccolta deve seguire le stesse regole della destinazione di un'espressione di raccolta.

Altri errori di parametri

Gli errori seguenti indicano altri problemi relativi all'uso del modificatore params:

  • CS0466: 'method1' non deve contenere un parametro params perché 'method2' non ne ha
  • CS0674: Non usare System.ParamArrayAttribute o System.Runtime.CompilerServices.ParamCollectionAttribute. Usare invece la parola chiave params.
  • CS0758: Entrambe le dichiarazioni di metodo parziale devono usare un parametro params, altrimenti nessuna delle due potrà usare un paramsparametro
  • CS9223: Creazione di una raccolta params genera una catena infinita di chiamate del costruttore.
  • CS9224: Il metodo non può essere meno visibile del membro con raccolta params.
  • CS9225: Il costruttore lascia il membro richiesto non inizializzato.

Un metodo che implementa un'interfaccia deve includere il modificatore params se e solo se il membro dell'interfaccia dispone del modificatore params. Analogamente, entrambe le dichiarazioni di un metodo partial devono includere il modificatore params oppure nessuno può includere il modificatore params.

È necessario usare il modificatore params. Non è possibile applicare gli attributi equivalenti System.ParamArrayAttribute o System.Runtime.CompilerServices.ParamCollectionAttribute.

Il compilatore genera uno dei tre errori finali nell'elenco precedente quando il codice generato per creare il tipo di raccolta non è valido:

  • Il compilatore genera CS9223 quando il codice generato per creare la raccolta contiene anche una raccolta params dello stesso tipo. In genere, il metodo Add accetta una raccolta params dello stesso tipo.
  • Il compilatore genera CS9224 quando il metodo Create per il tipo di raccolta è meno accessibile del metodo che accetta il parametro params del tipo di raccolta.
  • Il compilatore genera CS9225 quando il tipo di raccolta ha un membro obbligatorio e il costruttore senza parametri non inizializza tale membro e ha il System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute nel costruttore senza parametri.

Vedi anche