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

Nir*_*rMH 7 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__)
Run Code Online (Sandbox Code Playgroud)

C#中是否有类似的结构?我知道C#中没有宏,但有没有其他方法可以在执行期间获取当前文件,行和函数值?

Raf*_*fal 11

如果您使用的是.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);
}
Run Code Online (Sandbox Code Playgroud)

如果您使用较旧的框架和visual 2012,您只需要将它们声明为框架(相同的命名空间),以使它们工作.