Методи розширення дозволяють додавати методи до наявних типів, не створюючи новий похідний тип, не перекомпільовуючи код і не змінюючи в інший спосіб початковий тип. Їх визначають як статичні методи, але викликають за допомогою синтаксису методів екземпляра. Перед їхнім першим параметром ставлять модифікатор this, який указує, з яким типом працює метод, а самі методи додаються до області видимості на рівні простору імен.
public static int WordCount(this string str)
{
return str.Split().Length;
}
"Hello World".WordCount();
// => 2
У цій вправі ми обробляємо рядки логу.
Кожен рядок логу - це рядок тексту (англ. string) такого формату: "[<LEVEL>]: <MESSAGE>".
Є три різні рівні логу:
INFOWARNINGERRORНа нас чекає кілька завдань; кожне з них приймає рядок логу й просить щось із ним зробити.
Переглядаючи логи за минулий місяць, ми бачимо, що тестове повідомлення завжди розташоване після певного підрядка. Оскільки ми передбачаємо, що незабаром нам доведеться витягувати тестове повідомлення, ми вирішуємо створити допоміжний метод, який нам у цьому допоможе.
Реалізуйте (static) метод розширення LogAnalysis.SubstringAfter(), який приймає певний рядок-роздільник і повертає підрядок після нього.
var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."
При ближчому огляді ми бачимо, що рівень логу завжди розташований між квадратними дужками ([ and ]). Оскільки ми також передбачаємо, що незабаром нам доведеться витягувати рівень логу, ми вирішуємо створити ще один допоміжний метод, який нам у цьому допоможе.
Реалізуйте (static) метод розширення LogAnalysis.SubstringBetween(), який приймає два рядки-роздільники й повертає підрядок, що лежить між цими двома роздільниками.
var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"
Реалізуйте (static) метод розширення LogAnalysis.Message(), щоб повертати повідомлення, яке міститься в рядку логу.
var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."
Реалізуйте (static) метод розширення LogAnalysis.LogLevel(), щоб повертати рівень логу з рядка логу.
var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"
Зареєструйтеся на Exercism, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.