如何在C#中获得当前文件名和行数

在项目中有需求打印出当前函数调用处的行数,C++中可以用“__FILE__ and __LINE__”这个宏,那么在C#中应该如何实现类似的功能呢?

C#中提供了StackFrame这个类,通过调用它的方法即可简单的获得当前执行函数所在文件,以及在文件里的对应行数。

代码如下:

public static void WriteLog(String msg)
{
    StackFrame CallStack = new StackFrame(1, true);
    String SourceFile = CallStack.GetFileName();
    int lineNum = CallStack.GetFileLineNumber();
    WriteContent(msg, SourceFile, lineNum);
}

StatckFrame的构造函数中1代表堆栈上要跳过的帧数,也即用于构造StackFrame的帧当前指向了调用WriteLog这个方法的帧,true表示要捕获堆栈帧的文件名、行号和列号,如下图:

CSharp

这样获得了函数堆栈上正确的帧数之后,就可以通过调用StackFrame 中的GetLineNumber等函数获得你想要的信息了。

ps:注意StackFrame需要有PDB Files的支持。

ps1:最后再来首歌,挺好听的,还有爱熊行动 :mrgreen:

foobar2000完美歌词插件介绍

以前一直在用千千静听,但是由于千千静听不断挑战用户的底线,无限弹广告,让我对它已毫无好感。改用foobar也有一段时间了,一开始只是觉得它界面挺好看的,而且也比较简洁,最近想要个歌词显示的功能,就上网搜索了一把,对foobar又有了重新的了解:

foobar2000是一款免费软件,开发者为Peter Pawlowski(原Winamp开发公司Nullsoft成员),是多功能的音频播放器。除了播放之外,它还支持生成媒体库、转换媒体文件编码、提取CD等功能。它是一款功能强大的工具。foobar2000之所以出现,在于Peter不满于Winamp 2.x的插件体系架构和更倾向于图形、外观的发展方向的Winamp 3。

这显然又是一个技术大牛的杰作,foobar2000最大的特点就是其的任意定制化、模块化,用户可以随意的定制自己的foobar的界面,如果默认的Components里没有你想要的功能,你就可以去下载一个开发者开发的相应Components,只需将其放在foobar2000安装路径中的Components文件夹中,重启一下foobar2000后,就可以在foobar的preferences里找到你添加的components了,所有开发者的设计的功能你都可以在这里找到。另外它用的MP3解码器是mpglib,貌似也比较先进,之前也听人说过foobar2000的音质也很好,我倒是没明显感觉。说着说着就跑题了,总之foobar2000是一款很不错的播放器。 继续阅读