请检查我的以下代码...
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/