Dela via


Fel och varningar relaterade till tilläggsmetoder som deklarerats med this parametrar eller extension block

  • CS1100: Metoden har en parametermodifierare somthis inte finns på den första parametern
  • CS1101: Parametermodifieraren 'ref' kan inte användas med 'this'.
  • CS1102: Parametermodifieraren 'out' kan inte användas med 'this'.
  • CS1103: Den första parametern för en tilläggsmetod kan inte vara av pekartyp.
  • CS1105: Tilläggsmetoderna måste vara statiska.
  • CS1106: Tilläggsmetoder måste definieras i en icke-generisk statisk klass.
  • CS1109: Tilläggsmetoder måste definieras i statiska klasser på översta nivån, "namn" är en kapslad klass.
  • CS1110: Det går inte att definiera ett nytt tillägg eftersom det inte går att hitta den nödvändiga kompilatorns typ ExtensionAttribute . Saknar du en referens till System.Core.dll?
  • CS1112: Använd inte .ExtensionAttribute Använd nyckelordet "this" i stället.
  • CS1113: Tilläggsmetod som definierats för en värdetyp kan inte användas för att skapa ombud.
  • CS1743: Det går inte att ange ett standardvärde för parametern "this".
  • CS9281: Tilläggsdeklarationer kanske inte har något namn.
  • CS9282: Tilläggsdeklarationer kan endast innehålla metoder eller egenskaper.
  • CS9283: Tillägg måste deklareras i en statisk klass på toppnivå, icke-generisk.
  • CS9284: Mottagarparametern för ett tillägg kan inte ha ett standardvärde.
  • CS9285: En tilläggscontainer kan bara ha en mottagarparameter.
  • CS9287: En mottagarparameter får inte ha samma namn som en containertypsparameter för tillägg.
  • CS9288: En parameter, lokal variabel eller lokal funktion kan inte ha samma namn som en containertypsparameter för tillägget.
  • CS9289: Parametern för medlemstyp har samma namn som en containertypsparameter för tilläggscontainer.
  • CS9290: En parameter, lokal variabel eller lokal funktion kan inte ha samma namn som en tilläggsparameter.
  • CS9291: "value": ett automatiskt genererat parameternamn står i konflikt med ett tilläggsparameternamn.
  • CS9292: En typparameter har samma namn som en tilläggsparameter.
  • CS9293: Det går inte att använda en tilläggsparameter i den här kontexten.
  • CS9294: "value": Ett automatiskt genererat parameternamn står i konflikt med ett parameternamn av tilläggstyp.
  • CS9295: Den utökade typen måste referera till alla typparametrar som deklareras av tillägget, men en typparameter refereras inte.
  • CS9300: Mottagarparametern förref ett tilläggsblock måste vara en värdetyp eller en allmän typ som är begränsad till struct.
  • CS9301: Mottagarparametern "in" eller "ref readonly" för tillägget måste vara en konkret (icke-generisk) värdetyp.
  • CS9302: ny skyddad medlem deklarerad i ett tilläggsblock.
  • CS9303: Det går inte att deklarera instansmedlemmar i ett tilläggsblock med en namnlös mottagarparameter.
  • CS9304: Det går inte att deklarera init-only-åtkomster i ett tilläggsblock.
  • CS9305: Det går inte att använda modifierare på den namnlösa mottagarparametern för tilläggsblocket.

Vanliga fel i tilläggsdeklarationer

Kompilatorn genererar dessa fel när du bryter mot regler som gäller för alla medlemsdeklarationer för tillägg, oavsett vilken syntax som valts:

  • CS1102: Parametermodifieraren 'out' kan inte användas med 'this'.
  • CS1106: Tilläggsmetoder måste definieras i en icke-generisk statisk klass.
  • CS1103: Den första parametern för en tilläggsmetod kan inte vara av pekartyp.
  • CS1109: Tilläggsmetoder måste definieras i statiska klasser på översta nivån, "namn" är en kapslad klass.
  • CS1113: Tilläggsmetod som definierats för en värdetyp kan inte användas för att skapa ombud.
  • CS1743: Det går inte att ange ett standardvärde för parametern "this".
  • CS9283: Tillägg måste deklareras i en statisk klass på toppnivå, icke-generisk.
  • CS9284: Mottagarparametern för ett tillägg kan inte ha ett standardvärde.
  • CS9285: En tilläggscontainer kan bara ha en mottagarparameter.

Alla tilläggsdeklarationer måste följa dessa regler:

  • Dess innehållande typ (class eller struct) måste vara icke-generisk och static.
  • Dess innehållande typ måste vara en översta nivås typ. Den kan inte inbäddas i en annan typ.
  • Medlemmar som utökar en instans av en värdetyp kan inte konverteras till delegater.
  • Mottagarparametern kan inte innehålla out parametermodifieraren.
  • Mottagarparametern kan inte ha ett standardargumentvärde.
  • Pekartyper kan inte utökas. Med andra ord kan parametern som du tillämpar modifieraren på this inte vara en pekartyp.

Dessa fel är specifika för tilläggsblock, en C# 14-funktion. Tilläggsblock deklareras med nyckelordet extension i en statisk klass. Deklarerar extension mottagarens typ och namn. Alla medlemmar i blocket som deklareras med extension är tilläggsmedlemmar för mottagaren:

  • CS9281: Tilläggsdeklarationer kanske inte har något namn.
  • CS9282: Tilläggsdeklarationer kan endast innehålla metoder eller egenskaper.
  • CS9287: En mottagarparameter får inte ha samma namn som en containertypsparameter för tillägg.
  • CS9288: En parameter, lokal variabel eller lokal funktion kan inte ha samma namn som en containertypsparameter för tillägget.
  • CS9289: Parametern för medlemstyp har samma namn som en containertypsparameter för tilläggscontainer.
  • CS9290: En parameter, lokal variabel eller lokal funktion kan inte ha samma namn som en tilläggsparameter.
  • CS9291: "value": ett automatiskt genererat parameternamn står i konflikt med ett tilläggsparameternamn.
  • CS9292: En typparameter har samma namn som en tilläggsparameter.
  • CS9293: Det går inte att använda en tilläggsparameter i den här kontexten.
  • CS9294: "value": Ett automatiskt genererat parameternamn står i konflikt med ett parameternamn av tilläggstyp.
  • CS9295: Den utökade typen måste referera till alla typparametrar som deklareras av tillägget, men en typparameter refereras inte.
  • CS9300: Mottagarparametern förref ett tilläggsblock måste vara en värdetyp eller en allmän typ som är begränsad till struct.
  • CS9301: Mottagarparametern "in" eller "ref readonly" för tillägget måste vara en konkret (icke-generisk) värdetyp.
  • CS9302: ny skyddad medlem deklarerad i ett tilläggsblock.
  • CS9303: Det går inte att deklarera instansmedlemmar i ett tilläggsblock med en namnlös mottagarparameter.
  • CS9304: Det går inte att deklarera init-only-åtkomster i ett tilläggsblock.
  • CS9305: Det går inte att använda modifierare på den namnlösa mottagarparametern för tilläggsblocket.

Tilläggsdeklarationer måste följa dessa regler:

  • Tillägget kan inte innehålla en namntoken. Tillägget deklarerar endast mottagaren.
  • Mottagarparametern kan inte ha ett standardvärde.

Tilläggsmedlemmar som deklareras i ett tilläggsblock måste följa dessa regler, utöver de vanliga reglerna:

  • Endast metoder och egenskaper är giltiga tilläggsmedlemstyper. Tilläggsmedlemmar kan utöka en instans eller en typ.
  • Tillägget måste ange ett parameternamn för mottagaren för att kunna innehålla medlemmar som utökar en instans.
  • Namnet på mottagarparametern måste vara unikt i tilläggsblocket.
  • Alla tilläggsmedlemmar måste använda alla typparametrar som deklarerats i tillägget. De kan lägga till fler typparametrar.

Dessa fel är specifika för tilläggsmetoder där du deklarerar mottagaren genom att lägga till this modifieraren i metodens första parameter:

  • CS1100: Metoden har en parametermodifierare somthis inte finns på den första parametern
  • CS1101: Parametermodifieraren 'ref' kan inte användas med 'this'.
  • CS1105: Tilläggsmetoderna måste vara statiska.
  • CS1110: Det går inte att definiera ett nytt tillägg eftersom det inte går att hitta den nödvändiga kompilatorns typ ExtensionAttribute . Saknar du en referens till System.Core.dll?
  • CS1112: Använd inte .ExtensionAttribute Använd nyckelordet "this" i stället.

En tilläggsmetod där mottagarinstansen this innehåller modifieraren måste följa dessa regler, utöver de vanliga reglerna:

  • Metoden måste ha static modifieraren.
  • Parametermodifieraren this måste tillämpas på den första parametern. Det kan inte tillämpas på andra parametrar i metoden.
  • Parametermodifieraren refout kan inte tillämpas på den första parametern. Om du vill använda ref måste du konvertera till ett tilläggsblock.
  • I .NET Framework-appar System.Core.dll måste läggas till som referens.
  • Du måste ange modifieraren this på den första parametern. Du kan inte använda ExtensionAttribute attributet direkt i stället.