c# - 如何在没有 C/C++ 的情况下在 C# 中修饰代码——比如宏

标签 c# logging log4net

C# 不支持 C/C++ 宏。 StackOverflow 中有很多与此相关的问答,但我找不到具体问题的答案。

假设我正在使用 http://logging.apache.org/log4net/release/faq.html 中建议的代码:

if(log.IsDebugEnabled) 
{
    log.Debug("Entry number: " + i + " is " + entry[i]);
}

这种启用/禁用日志记录的方式有明显的缺点。在 C++ 中,我会使用像 LOG(expr) 这样的宏来提高代码的可读性,并更好地控制代码的“if(log.IsDebugEnabled)”部分(在项目中可能重复数千次)。

如何在 C# 中实现 LOG(expr) 之类的结果?

谢谢!

最佳答案

你不能……因为 C# 没有宏!

当然你也可以这样做:

定义接受 lambda 的日志函数

void Log(Func<string> f) {
  if(log.IsDebugEnabled) 
  {
    log.Debug(f());
  }
}

当你想记录一些东西时,像这样调用它:

Log(()=>"Entry number: " + i + " is " + entry[i]);

这样,只有在启用日志记录时才会评估参数,我认为这是您想要实现的。

(我的 C# 有点生疏,所以语法可能略有偏差)

关于c# - 如何在没有 C/C++ 的情况下在 C# 中修饰代码——比如宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13064189/

相关文章:

c# - Log4net File Appender 未在服务器中记录异常

nhibernate - NHibernate 如何实现可选的 log4net 日志记录

c# - WSDL 的 C# 中的日期时间到日期

java - 我在哪里可以看到程序中的日志

c# - 使用 C# 将图像上传到 Web API

java - Spring 启动执行器 : can I change the logger level for entire package in one go?

控制台应用程序上的 .NET Core DI 记录器未登录到控制台

c# - ASP.NET MVC + WIndsor + Log4Net 如何拦截模型?

c# - 在C#中生成任务并知道任务何时完成

c# - MVVM 违规