Os métodos de extensão permitem adicionar métodos a tipos existentes sem criar um novo tipo derivado, sem recompilar e sem modificar o tipo original de outra forma. Eles 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 vem precedido do modificador this e especifica em qual tipo o método opera. Os métodos de extensão entram no escopo no nível do namespace.
public static int WordCount(this string str)
{
return str.Split().Length;
}
"Hello World".WordCount();
// => 2
Neste exercício, você vai processar linhas de log.
Cada linha de log é uma string formatada assim: "[<LEVEL>]: <MESSAGE>".
Há três níveis de log diferentes:
INFOWARNINGERRORVocê tem várias tarefas, e cada uma vai receber uma linha de log e pedir que você faça algo com ela.
Olhando os logs do último mês, você vê que a mensagem de teste sempre está depois de uma substring específica. Como você prevê que vai precisar extrair a mensagem de teste em algum momento próximo, decide criar um método auxiliar para ajudar nisso.
Implemente o método de extensão (static) LogAnalysis.SubstringAfter(), que recebe um delimitador do tipo string e retorna a substring depois do delimitador.
var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."
Olhando com mais atenção, você vê que o nível de log sempre está entre colchetes ([ e ]). Como você também prevê que vai precisar extrair o nível de log em algum momento próximo, decide criar outro método auxiliar para ajudar nisso.
Implemente o método de extensão (static) LogAnalysis.SubstringBetween(), que recebe dois delimitadores do tipo string e retorna a substring que fica entre os dois delimitadores.
var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"
Implemente o método de extensão (static) LogAnalysis.Message() para retornar a mensagem contida em um log.
var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."
Implemente o método de extensão (static) LogAnalysis.LogLevel() para retornar o nível de log de um log.
var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"
Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.