Udostępnij za pośrednictwem


Błędy i ostrzeżenia związane z metodami rozszerzenia zadeklarowanymi za pomocą this parametrów lub extension bloków

  • CS1100: Metoda ma modyfikator parametrów "this", który nie znajduje się w pierwszym parametrze
  • CS1101: Modyfikator parametrów "ref" nie może być używany z elementem "this".
  • CS1102: Modyfikator parametrów "out" nie może być używany z elementem "this".
  • CS1103: Pierwszy parametr metody rozszerzenia nie może być typu wskaźnika.
  • CS1105: Metody rozszerzeń muszą być statyczne.
  • CS1106: Metody rozszerzenia muszą być zdefiniowane w klasie niegenerycznej statycznej.
  • CS1109: Metody rozszerzeń muszą być zdefiniowane w klasach statycznych najwyższego poziomu, "name" jest klasą zagnieżdżona.
  • CS1110: Nie można zdefiniować nowego rozszerzenia, ponieważ nie można odnaleźć wymaganego typu ExtensionAttribute kompilatora. Czy brakuje odwołania do System.Core.dll?
  • CS1112: Nie używaj 'ExtensionAttribute'. Zamiast tego użyj słowa kluczowego "this".
  • CS1113: Metoda rozszerzenia zdefiniowana na typie wartości nie może być używana do tworzenia delegatów.
  • CS1743: Nie można określić wartości domyślnej dla parametru "this".
  • CS9281: Deklaracje rozszerzeń mogą nie mieć nazwy.
  • CS9282: Deklaracje rozszerzeń mogą zawierać tylko metody lub właściwości.
  • CS9283: Rozszerzenia muszą być deklarowane w klasie statycznej najwyższego poziomu, innej niż ogólna.
  • CS9284: Parametr odbiornika rozszerzenia nie może mieć wartości domyślnej.
  • CS9285: Kontener rozszerzenia może mieć tylko jeden parametr odbiornika.
  • CS9287: Parametr odbiorcy nie może mieć takiej samej nazwy jak parametr typu kontenera rozszerzenia.
  • CS9288: Parametr, zmienna lokalna lub funkcja lokalna nie może mieć takiej samej nazwy jak parametr typu kontenera rozszerzenia.
  • CS9289: Parametr typu elementu członkowskiego ma taką samą nazwę jak parametr typu kontenera rozszerzenia.
  • CS9290: Parametr, zmienna lokalna lub funkcja lokalna nie może mieć takiej samej nazwy jak parametr rozszerzenia.
  • CS9291: "value": automatycznie wygenerowana nazwa parametru powoduje konflikt z nazwą parametru rozszerzenia.
  • CS9292: Parametr typu ma taką samą nazwę jak parametr rozszerzenia.
  • CS9293: Nie można użyć parametru rozszerzenia w tym kontekście.
  • CS9294: "value": automatycznie wygenerowana nazwa parametru powoduje konflikt z nazwą parametru typu rozszerzenia.
  • CS9295: Typ rozszerzony musi odwoływać się do wszystkich parametrów typu zadeklarowanych przez rozszerzenie, ale parametr typu nie jest przywołyny.
  • CS9300: refParametr odbiornika bloku rozszerzenia musi być typem wartości lub typem ogólnym ograniczonym do struktury.
  • CS9301: Parametr odbiornika "in" lub "ref readonly" rozszerzenia musi być konkretnym (niegeneryjnym) typem wartości.
  • CS9302: nowy chroniony członek zadeklarowany w bloku rozszerzenia.
  • CS9303: Nie można w bloku rozszerzenia z parametrem odbiornika bez nazwy zadeklarować elementów członkowskich wystąpienia.
  • CS9304: Nie można zadeklarować metod dostępu tylko do inicjowania w bloku rozszerzenia.
  • CS9305: Nie można używać modyfikatorów w nienazwanym parametrze odbiornika bloku rozszerzenia.

Typowe błędy deklaracji rozszerzeń

Kompilator emituje te błędy, gdy naruszasz reguły stosowane do wszystkich deklaracji składowych rozszerzenia, niezależnie od wybranej składni:

  • CS1102: Modyfikator parametrów "out" nie może być używany z elementem "this".
  • CS1106: Metody rozszerzenia muszą być zdefiniowane w klasie niegenerycznej statycznej.
  • CS1103: Pierwszy parametr metody rozszerzenia nie może być typu wskaźnika.
  • CS1109: Metody rozszerzeń muszą być zdefiniowane w klasach statycznych najwyższego poziomu, "name" jest klasą zagnieżdżona.
  • CS1113: Metoda rozszerzenia zdefiniowana na typie wartości nie może służyć do tworzenia delegatów.
  • CS1743: Nie można określić wartości domyślnej dla parametru "this".
  • CS9283: Rozszerzenia muszą być deklarowane w klasie statycznej najwyższego poziomu, innej niż ogólna.
  • CS9284: Parametr odbiornika rozszerzenia nie może mieć wartości domyślnej.
  • CS9285: Kontener rozszerzenia może mieć tylko jeden parametr odbiornika.

Każda deklaracja rozszerzenia musi przestrzegać następujących reguł:

  • Jego typ zawierający (class lub struct) musi być niegeneryczny i static.
  • Jego typ zawierający musi być typem najwyższego poziomu. Nie można go zagnieżdżać w innym typie.
  • Elementy rozszerzające wystąpienie typu wartości nie mogą być konwertowane na delegatów.
  • Parametr odbiorcy nie może zawierać modyfikatora parametrów out .
  • Parametr odbiorcy nie może mieć wartości argumentu domyślnego.
  • Nie można rozszerzyć typów wskaźników. Innymi słowy, modyfikator this stosowany dla parametru nie może dotyczyć typu wskaźnika.

Te błędy są specyficzne dla bloków rozszerzeń — funkcji języka C# 14. Bloki rozszerzeń są deklarowane przy użyciu extension słowa kluczowego w klasie statycznej. Element extension deklaruje typ i nazwę odbiorcy. Wszystkie elementy wewnątrz bloku zadeklarowane z extension są członkami rozszerzenia dla tego odbiornika:

  • CS9281: Deklaracje rozszerzeń mogą nie mieć nazwy.
  • CS9282: Deklaracje rozszerzeń mogą zawierać tylko metody lub właściwości.
  • CS9287: Parametr odbiorcy nie może mieć takiej samej nazwy jak parametr typu kontenera rozszerzenia.
  • CS9288: Parametr, zmienna lokalna lub funkcja lokalna nie może mieć takiej samej nazwy jak parametr typu kontenera rozszerzenia.
  • CS9289: Parametr typu członka ma taką samą nazwę jak parametr typu rozszerzalnego kontenera.
  • CS9290: Parametr, zmienna lokalna lub funkcja lokalna nie może mieć takiej samej nazwy jak parametr rozszerzenia.
  • CS9291: "value": automatycznie wygenerowana nazwa parametru powoduje konflikt z nazwą parametru rozszerzenia.
  • CS9292: Parametr typu ma taką samą nazwę jak parametr rozszerzenia.
  • CS9293: Nie można użyć parametru rozszerzenia w tym kontekście.
  • CS9294: "value": automatycznie wygenerowana nazwa parametru powoduje konflikt z nazwą parametru typu rozszerzenia.
  • CS9295: Typ rozszerzony musi odwoływać się do wszystkich parametrów typu zadeklarowanych przez rozszerzenie, ale parametr typu nie jest przywołyny.
  • CS9300: refParametr odbiornika bloku rozszerzenia musi być typem wartości lub typem ogólnym ograniczonym do struktury.
  • CS9301: Parametr odbiornika "in" lub "ref readonly" rozszerzenia musi być konkretnym (niegeneryjnym) typem wartości.
  • CS9302: nowy chroniony członek zadeklarowany w bloku rozszerzeń.
  • CS9303: Nie można zadeklarować elementów instancji w bloku rozszerzenia z nienazwanym parametrem odbiorcy.
  • CS9304: Nie można zadeklarować akcesorów tylko do inicjalizacji w bloku rozszerzenia.
  • CS9305: Nie można używać modyfikatorów w nienazwanym parametrze odbiornika bloku rozszerzenia.

Deklaracje rozszerzeń muszą być zgodne z następującymi regułami:

  • Rozszerzenie nie może zawierać tokenu nazwy. Rozszerzenie deklaruje tylko odbiornik.
  • Parametr odbiorcy nie może mieć wartości domyślnej.

Członkowie rozszerzenia zadeklarowani w bloku rozszerzenia muszą przestrzegać tych reguł, oprócz typowych reguł:

  • Tylko metody i właściwości są prawidłowymi typami składowych rozszerzeń. Członkowie rozszerzenia mogą rozszerzać instancję lub typ.
  • Rozszerzenie musi podać nazwę parametru dla odbiorcy, aby zawierały składniki, które rozszerzają wystąpienie.
  • Nazwa parametru odbiorcy musi być unikatowa w tym bloku rozszerzenia.
  • Wszystkie elementy członkowskie rozszerzenia muszą używać wszystkich parametrów typu zadeklarowanych w rozszerzeniu. Mogą dodawać więcej parametrów typu.

Te błędy są specyficzne dla metod rozszerzenia, w których deklarujesz odbiornik, dodając this modyfikator do pierwszego parametru metody:

  • CS1100: Metoda ma modyfikator parametrów "this", który nie znajduje się w pierwszym parametrze
  • CS1101: Modyfikator parametrów "ref" nie może być używany z elementem "this".
  • CS1105: Metody rozszerzeń muszą być statyczne.
  • CS1110: Nie można zdefiniować nowego rozszerzenia, ponieważ nie można odnaleźć wymaganego typu ExtensionAttribute kompilatora. Czy brakuje odwołania do System.Core.dll?
  • CS1112: Nie używaj 'ExtensionAttribute'. Zamiast tego użyj słowa kluczowego "this".

Metoda rozszerzająca, w której obiekt odbiorcy zawiera modyfikator this, musi stosować się do tych reguł oprócz typowych reguł:

  • Metoda musi mieć static modyfikator.
  • Modyfikator this parametrów musi zostać zastosowany do pierwszego parametru. Nie można go zastosować do innych parametrów metody .
  • Nie można zastosować modyfikatora do pierwszego parametru refout. Aby zastosować ref, należy przekonwertować na blok rozszerzenia.
  • W aplikacjach .NET Framework System.Core.dll należy dodać jako odwołanie.
  • Musisz określić this modyfikator pierwszego parametru. Zamiast tego nie można bezpośrednio użyć atrybutu ExtensionAttribute .