C # передает любой метод в качестве параметра

При ведении журнала вы всегда запутаетесь в строковых литералах.

Я решил это удобно для свойств, полей и переменных, передав выражение Expression > (как объясняется здесь ), поэтому вы можете делать такие вещи, как это:

public void Demo(string someArgument)
{
    LogFrameWork.LogLine("Demo"); // goal is to get rid of these string literals
    LogFramework.Log(() => someArgument);
}

Я хочу сделать что-то подобное для самого метода Demo :

public void Demo(string someArgument)
{
    LogFramework.Log(this.Demo);
}

Я пробовал такие вещи:

public static void Log(Delegate method)
{
    string methodName = method.Method.Name;
    LogLine(methodName);
}

и это:

public static void Log(Action method)
{
    string methodName = method.Method.Name;
    LogLine(methodName);
}

Но я получаю такие ошибки компилятора:

Argument 1: cannot convert from 'method group' to 'System.Delegate' 
Argument 1: cannot convert from 'method group' to 'System.Action'   

Я мог бы ввести кучу перегрузок с использованием Func <...> и Action <...>, но это звучит слишком сложно.

Есть ли способ охватить это для любого метода с любым количеством параметров и необязательным результатом?

- jeroen

PS: Я думаю этот вопрос может иметь здесь какое-то отношение, но нет ответов, которые вызывали у меня чувство «ага»: -)

6
задан Community 23 May 2017 в 12:16
поделиться