在登录时,你总是被字符串字面量所困扰。
我通过传递一个 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<...>和Action<...>来引入一堆重载,但这听起来过于复杂。
有没有一种方法可以涵盖任何具有任意数量参数和可选结果的方法?
--jeroen
PS:我认为this question可能在这里有一些相关性,但没有答案让我感到“啊哈”:-)