9

我有一个 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# 中没有宏,但是有没有其他方法可以在执行期间获取当前文件、行和函数值?

4

3 回答 3

14

如果您使用的是 .net 4.5,则可以使用CallerMemberName CallerFilePath CallerLineNumber 属性来检索此值。

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,您只需将它们声明为它们在框架中(相同的命名空间)以使其工作。

于 2012-11-14T11:22:52.850 回答
4

我想StackFrame这正是你要找的。

于 2012-11-14T11:17:07.753 回答
3

在 .NET 4.5 中有一组新属性可用于此目的:调用者信息

于 2012-11-14T11:22:42.287 回答