I metodi di estensione consentono di aggiungere metodi ai tipi esistenti senza creare un nuovo tipo derivato, ricompilare o modificare in altro modo il tipo originale. Sono definiti come metodi statici, ma vengono chiamati usando la sintassi dei metodi di istanza. Il loro primo parametro è preceduto dal modificatore this e specifica su quale tipo opera il metodo; i metodi di estensione vengono portati nello scope a livello di namespace.
public static int WordCount(this string str)
{
return str.Split().Length;
}
"Hello World".WordCount();
// => 2
In questo esercizio elaborerai delle righe di log.
Ogni riga di log è una stringa formattata così: "[<LEVEL>]: <MESSAGE>".
Ci sono tre diversi livelli di log:
INFOWARNINGERRORHai diversi compiti, ognuno dei quali riceverà una riga di log e ti chiederà di fare qualcosa con essa.
Guardando i log dell'ultimo mese, vedi che il messaggio di test si trova sempre dopo una sottostringa specifica. Dato che prevedi di dover estrarre il messaggio di test nel prossimo futuro, decidi di creare un metodo ausiliario che ti aiuti a farlo.
Implementa il metodo di estensione (static) LogAnalysis.SubstringAfter(), che riceve un delimitatore di tipo stringa e restituisce la sottostringa che segue il delimitatore.
var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."
Guardando più attentamente, vedi che il livello di log si trova sempre tra parentesi quadre ([ e ]). Dato che anche in questo caso prevedi di dover estrarre il livello di log nel prossimo futuro, decidi di creare un altro metodo ausiliario per questo.
Implementa il metodo di estensione (static) LogAnalysis.SubstringBetween() che riceve due delimitatori di tipo stringa e restituisce la sottostringa compresa tra i due delimitatori.
var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"
Implementa il metodo di estensione (static) LogAnalysis.Message() per restituire il messaggio contenuto in un log.
var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."
Implementa il metodo di estensione (static) LogAnalysis.LogLevel() per restituire il livello di log di un log.
var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"
Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.