C# 的enum型別代表一組固定的具名常數(也就是列舉)。它的主要用途是提供一種型別安全的方式來處理數值常數,把可用的值限制在預先定義好的集合中。簡單的列舉可以定義如下:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
如果沒有明確定義,列舉成員會自動被指派遞增的整數值,第一個值為零。此外,也可以明確定義這些值:
enum Answer
{
Maybe = 1,
Yes = 3,
No = 5
}
在這個練習中,你將會處理日誌行。
每一行日誌都是格式如下的字串:"[<LVL>]: <MESSAGE>"。
以下是不同的日誌等級:
TRC (trace)DBG (debug)INF (info)WRN (warning)ERR (error)FTL (fatal)你有 3 個任務。
定義一個LogLevel列舉,其中包含 6 個元素,分別對應上述的日誌等級。
TraceDebugInfoWarningErrorFatal接著,實作(static)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
實作(static)LogLine.OutputForShortLog()方法,輸出縮短後的日誌行格式:
LogLine.OutputForShortLog(LogLevel.Error, "Stack overflow")
// => "6:Stack overflow"