Recuperando el nombre del método invocado ejecutado en un Func

Me gustaría obtener el nombre del método que se está delegando como Func.

Func<MyObject, object> func = x => x.DoSomeMethod();
string name = ExtractMethodName(func); // should equal "DoSomeMethod"

¿Cómo puedo conseguir esto?

- Por presumir derechos -

HacerExtractMethodName También trabaje con una invocación de propiedad, haciendo que devuelva el nombre de la propiedad en esa instancia.

p.ej.

Func<MyObject, object> func = x => x.Property;
string name = ExtractMethodName(func); // should equal "Property"

Respuestas a la pregunta(3)

Su respuesta a la pregunta