Os métodos de extensão permitem adicionar métodos a tipos já existentes sem criar um novo tipo derivado, sem recompilar e sem modificar de outra forma o tipo original. São definidos como métodos estáticos, mas são chamados com a sintaxe de um método de instância. O primeiro parâmetro é precedido do modificador this e especifica o tipo sobre o qual o método opera. Os métodos de extensão são trazidos para o âmbito ao nível do espaço de nomes.
public static int WordCount(this string str)
{
return str.Split().Length;
}
"Hello World".WordCount();
// => 2
Neste exercício vais processar linhas de log.
Cada linha de log é uma string com o seguinte formato: "[<LEVEL>]: <MESSAGE>".
Existem três níveis de log diferentes:
INFOWARNINGERRORTens várias tarefas, cada uma das quais recebe uma linha de log e pede-te que faças algo com ela.
Ao olhares para os logs do último mês, vês que a mensagem de teste está sempre localizada a seguir a um substring específico. Como prevês ter de extrair a mensagem de teste num futuro próximo, decides criar um método auxiliar para te ajudar nisso.
Implementa o método de extensão (static) LogAnalysis.SubstringAfter(), que recebe um delimitador do tipo string e devolve o substring a seguir ao delimitador.
var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."
Numa inspeção mais atenta, vês que o nível de log está sempre entre parênteses retos ([ e ]). Como também prevês ter de extrair o nível de log num futuro próximo, decides criar outro método auxiliar para te ajudar nisso.
Implementa o método de extensão (static) LogAnalysis.SubstringBetween(), que recebe dois delimitadores do tipo string e devolve o substring que está entre os dois delimitadores.
var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"
Implementa o método de extensão (static) LogAnalysis.Message() para devolver a mensagem contida num log.
var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."
Implementa o método de extensão (static) LogAnalysis.LogLevel() para devolver o nível de log de um log.
var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"
Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.