免责声明:
那说......这可能吗?我真的很想知道。
换句话说,如果我有这样的话:
int i = GetSomeInteger();
GetSomeInteger
中的是否有任何方法代码可以“知道”在变量i
的赋值中被调用的事实?
再次:没有兴趣在任何真实场景中这样做。好奇!
答案 0 :(得分:2)
可以使用System.Diagnostics.StackTrace。
例如,您可以像这样获取调用方法的名称:
private static void stackExample()
{
var stack = new System.Diagnostics.StackTrace(true); // pass true to get more stack info
var callingMethod = stack.GetFrame(1).GetMethod().Name;
var callingLine = stack.GetFrame(1).GetFileLineNumber();
Console.WriteLine("callingMethod: " + callingMethod + " on line " + callingLine.ToString());
}
http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx
这不会给你调用方法的代码行,你必须有权访问它的源代码。 stack.GetFrame(1).GetFileName()将为您提供包含该方法的源代码的文件名。你可以从这里做什么,方法信息和行号是打开源文件并获得有问题的代码行。
GetMethod()为您提供各种重要信息,例如方法所在的模块,然后从那里获取汇编信息。
搜索所有元数据实际上非常有趣,它会告诉您各种关于代码的很酷的东西。
您无法获得实际代码行的原因是C#表单中的源本身未存储在程序集中。虽然你可以获得IL,但它更难以阅读。 :)
答案 1 :(得分:0)
我不知道具体如何访问它,但理论上,如果代码是使用调试符号编译的(例如,在调试配置中),那么信息就在那里。