如何避免C#中成员的`#if DEBUG`指令?

问题描述 投票:0回答:1

我在我的类中使用了一个log属性,仅用于调试目的。

注意:我不使用任何现有的记录器数据包,因为我管理一个大的对象列表,每个对象都有自己的(!)日志。

由于它未在发布模式下使用,因此它由预处理器指令包含:

#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似乎仅适用于属性和属性。

我想知道这个问题是否有任何设计模式可以提高可读性。我期待着你的想法!

c# .net idioms conditional-compilation idiomatic
1个回答
2
投票

看看log4net,它可能是.NET最流行的开源记录器。您将看到的众多好处之一是您可以在配置文件中配置一次记录器,并具有不同的调试和发布配置。这样,当您发布网站或应用程序时,自动完成切换到发布,您的代码中没有条件指令,并且您不需要更改代码以适应不同情况。

© www.soinside.com 2019 - 2024. All rights reserved.