• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

139
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.

about 3 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.

about 3 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) .

about 3 years ago · Santiago Trujillo Denunciar

0

new object() es mejor.

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

about 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda