我有一个C ++代码,我正在尝试迁移到C#。在那里,在C ++上,我使用以下宏定义进行调试。
#define CODE_LOCATION(FILE_NAME, LINE_NUM, FUNC_NAME) LINE_NUM, FILE_NAME, FUNC_NAME
#define __CODE_LOCATION__ CODE_LOCATION(__FILE__, __LINE__, __FUNCTION__)
C#中是否有类似的结构?我知道C#中没有宏,但有没有其他方法可以在执行期间获取当前文件,行和函数值?
答案 0 :(得分:11)
如果您使用的是.net 4.5,则可以使用CallerMemberName CallerFilePath CallerLineNumber attributes来检索此值。
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
Trace.WriteLine("source line number: " + sourceLineNumber);
}
如果您使用较旧的框架和visual 2012,您只需将它们声明为框架(相同的命名空间),以使它们工作。
答案 1 :(得分:4)
我猜StackFrame
正是您正在寻找的。 p>
答案 2 :(得分:3)
在.NET 4.5中,您可以使用一组新属性来实现此目的:Caller Information