【问题标题】:source code of anonymous method匿名方法的源代码
【发布时间】:2013-02-16 22:23:29
【问题描述】:

如何获取匿名方法的源代码?

例如:

Func<Boolean> func = (() => DateTime.Now.Seconds % 2 == 0);

Console.WriteLine(GetSourceCode(func)); // must: DateTime.Now.Seconds % 2 == 0

String GetSourceCode<T>(Func<T> f) - ???

【问题讨论】:

  • 所以GetSourceCode 应该返回string?我能问你为什么需要它吗?
  • 你不能,你只能得到MSIL,如果你喜欢反编译。那不是 lambda 表达式。
  • 是 GetSourceCode 返回字符串。
  • 我创建了我的单元测试框架。我想显示失败测试的源代码。
  • 我认为这是一个[类似的问题 - c# 我可以使用反射来检查方法中的代码吗?][1] 希望这会对您有所帮助。 [1]:stackoverflow.com/questions/2693881/…

标签: c# .net reflection anonymous-methods


【解决方案1】:

您可以将其包装在 Expression 中并在其上调用 ToString(),这将为您获取源代码。

像这样:

Expression<Func<Boolean>> func = (() => DateTime.Now.Seconds % 2 == 0);
var str = func.ToString();

输出str变成 () =&gt; DateTime.Now.Seconds % 2 == 0

【讨论】:

  • +1 太棒了,不知道这个!输出为() =&gt; DateTime.Now.Second % 2 == 0
  • 值得注意的是,从技术上讲,这不是一个函数。如果你真的有一个函数,你永远无法将它的源代码作为字符串获取。
猜你喜欢
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 2010-12-06
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多