При ведении журнала вы всегда запутываетесь в строковых литералах.
Я решил это красиво для свойств, полей и переменных, передав Expression<Func<T>> 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 <...> и Действие <...> , но это звучит слишком сложно.
Есть ли способ покрыть это для любого метода с любым количеством параметров и дополнительным результатом?
- jeroen
PS: я думаю этот вопрос может иметь какое-то отношение здесь, но нет ответов, которые вызвали бы у меня чувство "ага": -)