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.
[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.
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)
.
new object()
es mejor.
Expression.Empty()
realmente no tiene ningún sentido.