Compartir a través de


Errores y advertencias relacionados con los métodos de extensión declarados con this parámetros o extension bloques

  • CS1100: el método tiene un modificador de parámetro 'this' que no está en el primer parámetro
  • CS1101: el modificador de parámetro 'ref' no se puede usar con 'this'.
  • CS1102: el modificador de parámetro 'out' no se puede usar con 'this'.
  • CS1103: el primer parámetro de un método de extensión no puede ser de un tipo de puntero.
  • CS1105: los métodos de extensión deben ser estáticos.
  • CS1106: los métodos de extensión deben definirse en una clase estática no genérica.
  • CS1109: los métodos de extensión deben definirse en clases estáticas de nivel superior, "name" es una clase anidada.
  • CS1110: no se puede definir una nueva extensión porque no se encuentra el tipo ExtensionAttribute necesario del compilador. ¿Falta una referencia a System.Core.dll?
  • CS1112: No usar 'ExtensionAttribute'. Use la palabra clave 'this' en su lugar.
  • CS1113: No se puede utilizar un método de extensión definido en un tipo de valor para crear delegados.
  • CS1743: No se puede especificar un valor predeterminado para el parámetro "this".
  • CS9281: es posible que las declaraciones de extensión no tengan un nombre.
  • CS9282: las declaraciones de extensión solo pueden incluir métodos o propiedades.
  • CS9283: las extensiones deben declararse en una clase estática no genérica de nivel superior.
  • CS9284: el parámetro receptor de una extensión no puede tener un valor predeterminado.
  • CS9285: un contenedor de extensiones solo puede tener un parámetro receptor.
  • CS9287: un parámetro receptor no puede tener el mismo nombre que un parámetro de tipo de contenedor de extensión.
  • CS9288: un parámetro, una variable local o una función local no puede tener el mismo nombre que un parámetro de tipo de contenedor de extensión.
  • CS9289: el parámetro de tipo de miembro tiene el mismo nombre que un parámetro de tipo de contenedor de extensión.
  • CS9290: un parámetro, una variable local o una función local no puede tener el mismo nombre que un parámetro de extensión.
  • CS9291: 'value': un nombre de parámetro generado automáticamente entra en conflicto con un nombre de parámetro de extensión.
  • CS9292: un parámetro de tipo tiene el mismo nombre que un parámetro de extensión.
  • CS9293: no se puede usar un parámetro de extensión en este contexto.
  • CS9294: 'value': un nombre de parámetro generado automáticamente entra en conflicto con un nombre de parámetro de tipo de extensión.
  • CS9295: el tipo extendido debe hacer referencia a todos los parámetros de tipo declarados por la extensión, pero no se hace referencia a un parámetro de tipo.
  • CS9300: el parámetro receptor 'ref' de un bloque de extensión debe ser un tipo de valor o un tipo genérico restringido a struct.
  • CS9301: el parámetro receptor 'in' o 'ref readonly' de la extensión debe ser un tipo de valor concreto (no genérico).
  • CS9302: nuevo miembro protegido declarado en un bloque de extensión.
  • CS9303: no se pueden declarar miembros de instancia en un bloque de extensión con un parámetro de receptor sin nombre.
  • CS9304: no se pueden declarar descriptores de acceso de solo inicialización en un bloque de extensión.
  • CS9305: No se pueden usar modificadores en el parámetro receptor sin nombre del bloque de extensión.

Errores comunes en las declaraciones de extensión

El compilador emite estos errores cuando infringe las reglas que se aplican a todas las declaraciones de miembro de extensión, independientemente de la sintaxis elegida:

  • CS1102: el modificador de parámetro 'out' no se puede usar con 'this'.
  • CS1106: los métodos de extensión deben definirse en una clase estática no genérica.
  • CS1103: el primer parámetro de un método de extensión no puede ser de un tipo de puntero.
  • CS1109: los métodos de extensión deben definirse en clases estáticas de nivel superior, "name" es una clase anidada.
  • CS1113: No se puede utilizar un método de extensión definido en un tipo de valor para crear delegados.
  • CS1743: No se puede especificar un valor predeterminado para el parámetro "this".
  • CS9283: las extensiones deben declararse en una clase estática no genérica de nivel superior.
  • CS9284: el parámetro receptor de una extensión no puede tener un valor predeterminado.
  • CS9285: un contenedor de extensiones solo puede tener un parámetro receptor.

Cualquier declaración de extensión debe seguir estas reglas:

  • El tipo que lo contiene (class o struct) debe no ser genérico y static.
  • Su tipo contenedor debe ser un tipo de nivel superior. No se puede anidar en otro tipo.
  • Los miembros que amplían una instancia de un tipo de valor no pueden ser convertidos en delegados.
  • El parámetro receptor no puede incluir el modificador de parámetro out.
  • El parámetro receptor no puede tener un valor de argumento predeterminado.
  • Los tipos de puntero no se pueden extender. En otras palabras, el parámetro al que se aplica el this modificador no puede ser un tipo de puntero.

Estos errores son específicos de los bloques de extensión, una característica de C# 14. Los bloques de extensión se declaran mediante la extension palabra clave en una clase estática. extension declara el tipo y el nombre del receptor. Todos los miembros del bloque declarados con extension son miembros de extensión para ese receptor:

  • CS9281: es posible que las declaraciones de extensión no tengan un nombre.
  • CS9282: las declaraciones de extensión solo pueden incluir métodos o propiedades.
  • CS9287: un parámetro receptor no puede tener el mismo nombre que un parámetro de tipo de contenedor de extensión.
  • CS9288: un parámetro, una variable local o una función local no puede tener el mismo nombre que un parámetro de tipo de contenedor de extensión.
  • CS9289: el parámetro de tipo de miembro tiene el mismo nombre que un parámetro de tipo de contenedor de extensión.
  • CS9290: un parámetro, una variable local o una función local no puede tener el mismo nombre que un parámetro de extensión.
  • CS9291: 'value': un nombre de parámetro generado automáticamente entra en conflicto con un nombre de parámetro de extensión.
  • CS9292: un parámetro de tipo tiene el mismo nombre que un parámetro de extensión.
  • CS9293: no se puede usar un parámetro de extensión en este contexto.
  • CS9294: 'value': un nombre de parámetro generado automáticamente entra en conflicto con un nombre de parámetro de tipo de extensión.
  • CS9295: el tipo extendido debe hacer referencia a todos los parámetros de tipo declarados por la extensión, pero no se hace referencia a un parámetro de tipo.
  • CS9300: el parámetro receptor 'ref' de un bloque de extensión debe ser un tipo de valor o un tipo genérico restringido a struct.
  • CS9301: el parámetro receptor 'in' o 'ref readonly' de la extensión debe ser un tipo de valor concreto (no genérico).
  • CS9302: nuevo miembro protegido declarado en un bloque de extensión.
  • CS9303: no se pueden declarar miembros de instancia en un bloque de extensión con un parámetro de receptor sin nombre.
  • CS9304: No se pueden declarar accesores de solo inicialización en un bloque de extensión.
  • CS9305: No se pueden aplicar modificadores al parámetro receptor no especificado en el bloque de extensión.

Las declaraciones de extensión deben seguir estas reglas:

  • La extensión no puede incluir un token de nombre. La extensión declara solo el receptor.
  • El parámetro receptor no puede tener un valor predeterminado.

Los miembros de extensión declarados en un bloque de extensión deben seguir estas reglas, además de las reglas comunes:

  • Solo los métodos y propiedades son tipos de miembros de extensión válidos. Los miembros de extensión pueden extender una instancia o un tipo.
  • La extensión debe proporcionar un nombre de parámetro para el receptor con el fin de contener miembros que extienden una instancia.
  • El nombre del parámetro receptor debe ser único en ese bloque de extensión.
  • Todos los miembros de la extensión deben usar todos los parámetros de tipo declarados en la extensión. Pueden agregar más parámetros de tipo.

Estos errores son específicos de los métodos de extensión en los que declara el receptor agregando el this modificador al primer parámetro del método:

  • CS1100: el método tiene un modificador de parámetro 'this' que no está en el primer parámetro
  • CS1101: el modificador de parámetro 'ref' no se puede usar con 'this'.
  • CS1105: los métodos de extensión deben ser estáticos.
  • CS1110: no se puede definir una nueva extensión porque no se encuentra el tipo ExtensionAttribute necesario del compilador. ¿Falta una referencia a System.Core.dll?
  • CS1112: No usar 'ExtensionAttribute'. Use la palabra clave 'this' en su lugar.

Un método de extensión donde la instancia del receptor incluye el this modificador debe seguir estas reglas, además de las reglas comunes:

  • El método debe tener el static modificador .
  • El this modificador de parámetro debe aplicarse al primer parámetro. No se puede aplicar a ningún otro parámetro del método .
  • El refout modificador de parámetro no se puede aplicar al primer parámetro. Para aplicar ref, debe convertirlo en un bloque de extensión.
  • En las aplicaciones de .NET Framework, System.Core.dll se debe agregar como referencia.
  • Debe especificar el modificador this en el primer parámetro. No puede usar directamente el ExtensionAttribute atributo en su lugar.