Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

260
Vistas
¿Por qué no está permitido declarar un cuerpo de expresión vacío para los métodos?

Tenía un método que tiene un cuerpo vacío como este:

 public void Foo() { }

Como sugirió ReSharper, quería convertirlo en cuerpo de expresión para ahorrar espacio y se convirtió en:

 public void Foo() => ;

que no compila. ¿Hay alguna razón específica por la que esto no sea compatible?

Y creo que debería abrir un ticket de error para ReSharper, ya que refactoriza el código a una versión no compilable.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

[EDITAR: Esta respuesta no es correcta, no la use - vea los comentarios.]

Como puede ver, el cuerpo de la expresión usa el operador lambda ("=>"). Si aún desea escribir su método void vacío como un cuerpo de expresión, puede usar Expression.Empty() para mostrar que Foo() es una expresión vacía (void).

Los métodos que devuelven void o Task deben implementarse con expresiones que tampoco devuelvan nada. ( https://docs.microsoft.com/en-us/archive/msdn-magazine/2014/octubre/csharp-the-new-and-improved-csharp-6-0 )

La siguiente pieza de código debería funcionar.

 public void Foo() => Expression.Empty();

También estoy de acuerdo con su último comentario de que es un error de ReSharper.

over 4 years ago · Santiago Trujillo Denunciar

0

De los documentos :

Una definición de cuerpo de expresión tiene la siguiente sintaxis general:

miembro => expresión;

donde expresión es una expresión válida .

También:

Un método con cuerpo de expresión consta de una sola expresión que devuelve un valor cuyo tipo coincide con el tipo de retorno del método o , para los métodos que devuelven void, que realiza alguna operación .

Entonces, si desea usar miembros con cuerpo de expresión, en realidad necesita ... una expresión (¡Sorpresa!)

Pero aún puedes usar el estilo convencional:

 string Property { get => _value; set { } // empty } void Method() { } // empty

Podría crear un ayudante "no operativo", como este:

 public static void Noop() {} string Property { set => Noop(); } void Method() => Noop();

Otra alternativa sería GC.KeepAlive(null) .

over 4 years ago · Santiago Trujillo Denunciar

0

new object() es mejor.

Expression.Empty() realmente no tiene ningún sentido.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda