學習軌道
/
C#
C#
/
練習
/
日誌、日誌、日誌!
日誌、日誌、日誌!

日誌、日誌、日誌!

學習練習

簡介

列舉

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 個任務。

1. 解析日誌等級

定義一個LogLevel列舉,其中包含 6 個元素,分別對應上述的日誌等級。

  • Trace
  • Debug
  • Info
  • Warning
  • Error
  • Fatal

接著,實作(static)LogLine.ParseLogLevel()方法,用來解析日誌行的日誌等級:

LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info

2. 支援未知的日誌等級

很遺憾,偶爾會有些日誌行帶有未知的日誌等級。為了優雅地處理這些日誌行,請在LogLevel列舉中新增一個Unknown元素;解析到未知的日誌等級時,就應該回傳這個元素:

LogLine.ParseLogLevel("[XYZ]: Overly specific, out of context message")
// => LogLevel.Unknown

3. 將日誌行轉換成簡短格式

日誌行的日誌等級相當冗長。為了減少儲存日誌行所需的磁碟空間,我們設計出一種簡短格式:"[<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"
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 日誌、日誌、日誌! 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。