Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exercício 11 Estendendo classes

Letra D não deu erro nos meus testes conforme solução da questão. Gostaria de entender melhor o que aconteceu

2 respostas
solução!

Boa tarde, Leandro.

Segue abaixo um código que implementa a opção D. Copie e cole-o do jeito que está e execute o programa. Você pode usar algum editor online, como o https://dotnetfiddle.net/

Você notará que sua IDE, ou editor online como citei acima, lhe dará o seguinte erro:

Compilation error (line 10, col 29): 'string' does not contain a definition for 'EhCEPValido'

E por que este erro ocorre? Porque na definição do método de extensão não foi informado a palavra chave this no parâmetro. É essa palavra que instrui ao compilador que trata-se de um método de extensão.

Então precisamos corrigir isto: public static bool EhCEPValido(string str)

Por isso: public static bool EhCEPValido(this string str)

Quando o compilador ver essa palavra chave this, irá entender que você quer declarar um método de extensão para o tipo string.

Espero ter ajudado :D

using System;
using System.Text.RegularExpressions;

namespace Exercise11
{
    public class ExtensionMethods
    {
        public static void Main(string[] args)
        {
            Console.WriteLine(string.EhCEPValido("teste"));
        }        
    }

    public static class EnderecoExtensions
    {
        public static bool EhCEPValido(string str)
        {
            var regex = new Regex(@"^\d{5}-\d{3}$");
            return regex.IsMatch(str);
        }
    }
}

Legal, obrigado pela resposta