c# - 如何避免 C# 中成员的“#if DEBUG”指令?
问题描述
我在我的类中使用了一个仅用于调试目的的日志属性。
注意:我不使用任何现有的记录器数据包,因为我管理大量对象列表,每个对象都有自己的 (!) 日志。
由于它不在发布模式下使用,因此它包含在预处理器指令中:
#if DEBUG
public List<LogItem> DebugLog { get; }
#endif
不幸的是,我需要多次初始化和复制此属性,导致代码如下所示:
public MyClass(object parameterA, object parameterB, ...,
#if DEBUG
, List<LogItem> debugLog
#endif
) {
throw new NotImplementedException();
}
虽然对于实际的日志记录,我编写了一个[Conditional("DEBUG")]
方法,但我不知道有任何可能避免使用这种丑陋且违反习惯用法的指令来记录参数和参数。ConditionalAttribute似乎仅适用于属性和属性。
我想知道这个问题是否有任何设计模式可以提高可读性。我期待着你的想法!
解决方案
看看log4net,它可能是最流行的 .NET 开源记录器。您将看到的众多好处之一是您可以在配置文件中配置一次记录器,并为调试和发布提供不同的配置。这样,当您发布网站或应用程序时,会自动切换到发布,您的代码中没有条件指令,并且您无需更改代码以适应不同的情况。
推荐阅读
- python - Cmake 在 Windows 10 上找不到 python37.dll,但文件路径在缓存文件中。(pybind11)
- node.js - Socket.io + NodeJS IONIC CORS 问题
- node.js - 异步函数内部的异步错误
- electron - 未捕获的错误:无法在电子应用程序上调用远程函数“capturePage”
- python - 如何增加小应用程序的 Heroku Slug 大小?
- node.js - 在 NodeJS 中遍历 JSON 文件
- javascript - React.js onChange标签挂起
- mongodb - 如何在mongodb重复错误中检索错误对象
- c# - Blazor 中的 js 互操作的静态扩展如何工作?
- javascript - 如何使用 JavaScript for 循环将 ASCII 代码转换为单词