请检查我的以下代码...

public enum LogType
{
    Debug,
    Info,
    Warn,
    Error,
    Fatal
}

private static readonly ILog log =
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

public void LogError(LogType logtype, string message)
{
    XmlConfigurator.Configure();
    if (logtype == LogType.Debug)
        log.Debug(message);
    else if (logtype == LogType.Error)
        log.Error(message);
}

我不喜欢上面所有的if-else语句,并且相信有一种更简洁的编写方法。我该如何重构?日志类具有用于Debug,Error等的不同方法。

我想对方法进行一次调用,使它自动处理它。
LogMyError(LogType.Debug, "I am just logging here");

我该怎么做?我宁愿远离switch语句。我正在寻找一种干净的面向对象的方法。

最佳答案

您可以使用Dictionary<LogType,Action<string>>来保留要对每个枚举值执行的操作,然后只需调用委托(delegate)即可。

var logActions = new Dictionary<LogType,Action<string>>();
logActions.Add(LogType.Debug, log.Debug);
...

logActions[logtype](message);

更新:

如果您的if语句上只有很少的分支,那么这一切都太过分了。我会在5个以上的ifs中使用此方法。

关于C#重构if-else语句代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10035796/

10-12 19:45