C#のenum型は、名前付き定数の固定セット(列挙型)を表します。その主な目的は、数値定数を型安全に扱えるようにし、使用できる値をあらかじめ定義されたセットに限定することです。単純な列挙型は次のように定義できます:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
明示的に定義しない場合、列挙型のメンバーには自動的に1ずつ増える整数値が割り当てられ、最初の値は0になります。値を明示的に割り当てることもできます:
enum Answer
{
Maybe = 1,
Yes = 3,
No = 5
}
この演習では、ログ行を処理します。
各ログ行は、"[<LVL>]: <MESSAGE>"という形式の文字列です。
ログレベルには、次の種類があります:
TRC(トレース)DBG(デバッグ)INF(情報)WRN(警告)ERR(エラー)FTL(致命的)取り組むタスクは3つあります。
上のログレベルに対応する6つの要素を持つLogLevel列挙型を定義します。
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"