يمثّل نوع enum في C# مجموعة ثابتة من الثوابت المُسمّاة (التعداد). وغرضه الرئيسي توفير طريقة آمنة نوعيًا للتعامل مع الثوابت العددية، بحيث تحصر القيم المتاحة في مجموعة محددة مسبقًا. ويمكن تعريف تعداد بسيط كما يلي:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
إذا لم تُعرَّف القيم صراحةً، فسيُسنَد إلى أعضاء التعداد تلقائيًا قيم عددية صحيحة متزايدة، وتكون القيمة الأولى هي الصفر. ويمكن أيضًا إسناد القيم صراحةً:
enum Answer
{
Maybe = 1,
Yes = 3,
No = 5
}
في هذا التمرين ستتعامل مع أسطر السجل.
كل سطر سجل هو سلسلة نصية مُنسّقة على النحو التالي: "[<LVL>]: <MESSAGE>".
هذه هي مستويات السجل المختلفة:
TRC (تتبع)DBG (تصحيح)INF (معلومات)WRN (تحذير)ERR (خطأ)FTL (خطأ فادح)لديك ثلاث مهام.
عرّف تعداد LogLevel يحتوي على ستة عناصر تقابل مستويات السجل المذكورة أعلاه.
TraceDebugInfoWarningErrorFatalبعد ذلك، نفّذ الطريقة (static) LogLine.ParseLogLevel() لتحليل مستوى السجل في سطر السجل:
LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info
لسوء الحظ، تحتوي بعض أسطر السجل أحيانًا على مستوى سجل غير معروف. للتعامل مع أسطر السجل هذه بسلاسة، أضف عنصرًا Unknown إلى تعداد LogLevel، ويجب إرجاعه عند تحليل مستوى سجل غير معروف:
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"
سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.