C#等效于C ++ __FILE __,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

时间:2012-11-14 11:12:49

标签: c#

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

3 个答案:

答案 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正是您正在寻找的。

答案 2 :(得分:3)

在.NET 4.5中,您可以使用一组新属性来实现此目的:Caller Information