C# 的 enum 类型表示一组固定的具名常量(也就是枚举)。它的主要用途是提供一种类型安全的方式来处理数字常量,把可用的取值限制在一个预先定义好的集合内。一个简单的枚举可以这样定义:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
如果没有显式赋值,枚举成员会自动获得递增的整数值,其中第一个值为 0。也可以显式赋值:
enum Answer
{
Maybe = 1,
Yes = 3,
No = 5
}
在本练习中,你将处理日志行。
每一行日志都是一个字符串,格式如下:"[<LVL>]: <MESSAGE>"。
以下是不同的日志级别:
TRC(trace)DBG(debug)INF(info)WRN(warning)ERR(error)FTL(fatal)你有三个任务。
定义一个 LogLevel 枚举,其中包含六个元素,分别对应上面的日志级别。
TraceDebugInfoWarningErrorFatal接下来,实现(静态)LogLine.ParseLogLevel() 方法,以解析日志行的日志级别:
LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info
遗憾的是,偶尔会有一些日志行带有未知的日志级别。为了优雅地处理这些日志行,请向 LogLevel 枚举添加一个 Unknown 元素,在解析到未知日志级别时返回它:
LogLine.ParseLogLevel("[XYZ]: Overly specific, out of context message")
// => LogLevel.Unknown
日志行中的日志级别相当冗长。为了减少存储日志行所需的磁盘空间,人们设计了一种短格式:"[<ENCODED_LEVEL>]:<MESSAGE>"。
编码后的日志级别就是把日志级别简单映射为一个数字:
Unknown - 0
Trace - 1
Debug - 2
Info - 4
Warning - 5
Error - 6
Fatal - 42
实现(静态)LogLine.OutputForShortLog() 方法,用于输出缩短后的日志行格式:
LogLine.OutputForShortLog(LogLevel.Error, "Stack overflow")
// => "6:Stack overflow"