При ведении журнала вы всегда запутаетесь в строковых литералах.
Я решил это удобно для свойств, полей и переменных, передав выражение 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: Я думаю этот вопрос может иметь здесь какое-то отношение, но нет ответов, которые вызывали у меня чувство «ага»: -)