C#重载++运算符的函数

时间:2012-06-26 08:10:11

标签: c# operators log4net indentation

我正在寻找一种方法来缩进我的日志记录语句。 经过一番谷歌搜索并搜索SO后,我在我的包装器中为log4net实现了一个Indent类来处理缩进我的记录器语句。

现在我需要调用thees方法来增加和减少缩进。

_logger.Indent.Increase();
_logger.Debug(msg);
...
_logger.Indent.Decrease();

但是在每个函数中都有这两个额外的行等等会不必要地污染代码。是否有一些语法糖果方式以更好的方式做到这一点,或者我应该以完全不同的方式做到这一点?

无论如何这会很好! :P

_logger.Debug(msg)++; //Increase indent for this logger statement and all to come.
_logger.Debug(msg)--; //Decrease Indent and logg...

2 个答案:

答案 0 :(得分:2)

您可以为记录器本身定义++--运算符,分别增加和减少缩进,并Debug(和Warn,{{1}同样返回记录器,然后你可以使用更好的,(但由于预增量中的括号可能不完美)语法:

Error

对我来说这更有意义,因为使用pre [[| dec] rement运算符你会说“[inc | dec]缩进缩进,然后记录一条消息”,并且后[[| | dec] rement运算符意味着“记录消息然后 [inc | dec]来缩进缩进”。

这样做还允许您使用以下方法调整增量:

// Increment the indent, then log a message
(++_logger).Debug(msg);

// Log a message then decrement the indent
_logger.Debug(msg)--;

您还可以按如下方式定义新类:

++_logger;
--_logger;

然后你可以这样做:

public sealed class LogScope : IDisposable
{
    private readonly Logger _logger;

    public LogScope(Logger logger)
    {
        _logger = logger;
        ++_logger;
    }

    public void Dispose()
    {
        --_logger;
    }
}

答案 1 :(得分:0)

如果让Debug函数返回记录器Indent对象,并且在Indent类中你有++和 - 的静态隐式运算符,你可以这样做。这是你的意思吗?