نوع enum در زبان C# مجموعهای ثابت از ثابتهای نامدار را نمایش میدهد (یک «شمارشی»). هدف اصلی آن فراهم کردن راهی ایمن از نظر نوع برای تعامل با ثابتهای عددی است و مقادیر در دسترس را به مجموعهای از پیش تعریفشده محدود میکند. یک شمارشی ساده را میتوان به شکل زیر تعریف کرد:
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)سه وظیفه دارید.
یک enum به اسم LogLevel تعریف کنید که شش عضو متناظر با سطوح لاگ بالا دارد.
TraceDebugInfoWarningErrorFatalدر ادامه، متد (static) LogLine.ParseLogLevel() را پیادهسازی کنید تا سطح لاگ یک خط لاگ را تجزیه کند:
LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info
متأسفانه گاهی برخی خطوط لاگ سطح لاگ ناشناخته دارند. برای اینکه این خطوط لاگ را بهخوبی مدیریت کنید، به enum 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"