C#将任何方法作为参数传递

C#将任何方法作为参数传递,第1张

概述记录时,总是会纠缠于字符串文字中. 我通过传递表达式< Func< T>>来很好地解决了属性,字段和变量.表达式(如here所述),所以你可以做这样的事情: public void Demo(string someArgument){ LogFrameWork.LogLine("Demo"); // goal is to get rid of these string literals 记录时,总是会纠缠于字符串文字中.

我通过传递表达式< Func< T>>来很好地解决了属性,字段和变量.表达式(如here所述),所以你可以做这样的事情:

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可能在这里有一些相关性,但没有答案让我感到’aha’的感觉:-)

解决方法 而不是尝试将方法作为参数传递给记录器,而是从使记录器识别调用方法的角度来看它.

这是一个(伪)示例:

记录器类

public voID DeBUG( string message ){  message = string.Format( "{0}: {1}",GetCallingMethodInfo(),message );  // logging stuff}/// <summary>/// Gets the application name and method that called the logger./// </summary>/// <returns></returns>private static string GetCallingMethodInfo(){  // we should be looking at the stack 2 frames in the past:  // 1. for the calling method in this class  // 2. for the calling method that called the method in this class  MethodBase method = new StackFrame( 2 ).getmethod();  string name = method.name;  string type = method.DeclaringType.name;  return string.Format( "{0}.{1}",type,name );}

使用记录器的任何地方:

// resIDes in class Foopublic voID SomeMethod(){  logger.DeBUG("Start");}

然后记录器的输出为:Foo.someMethod:Start

总结

以上是内存溢出为你收集整理的C#将任何方法作为参数传递全部内容,希望文章能够帮你解决C#将任何方法作为参数传递所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存