public async void Main()
        {
            WriteLine("11. Métodos De Extensão Para Inicializadores De Coleção");

            StreamWriter logAplicacao = new StreamWriter("LogAplicacao.txt");

            try
            {
                await logAplicacao.WriteLineAsync("Aplicação está iniciando...");

                Aluno aluno = new Aluno("Marty", "McFly", new DateTime(1968, 6, 12))
                {
                    Endereco = "9303 Lyon Drive Hill Valley CA",
                    Telefone = "555-4385"
                };

                await logAplicacao.WriteLineAsync($"Aluno {aluno.NomeCompleto} foi criado...");

                WriteLine(aluno.Nome);
                WriteLine(aluno.Sobrenome);

                WriteLine(aluno.NomeCompleto);
                WriteLine("Idade: {0}", aluno.GetIdade());
                WriteLine(aluno.DadosPessoais);

                aluno.AdicionarAvaliacao(new Avaliacao(1, "GEO", 8));
                aluno.AdicionarAvaliacao(new Avaliacao(1, "MAT", 7));
                aluno.AdicionarAvaliacao(new Avaliacao(1, "HIS", 9));

                foreach (var avaliacao in aluno.Avaliacoes)
                {
                    Console.WriteLine(avaliacao);
                }

                ImprimirMelhorNota(aluno);

                Aluno aluno2 = new Aluno("Bart", "Simpson");

                await logAplicacao.WriteLineAsync($"Aluno {aluno2.NomeCompleto} foi criado...");

                ImprimirMelhorNota(aluno2);

                aluno.PropertyChanged += Aluno_PropertyChanged;

                aluno.Endereco = "Rua Vergueiro, 3185";
                aluno.Telefone = "555-1234";

                Aluno aluno3 = new Aluno("Charlie", "Brown");

                await logAplicacao.WriteLineAsync("Aluno Charlie Brown foi criado...");

                ListaDeMatricula listaDeMatricula = new ListaDeMatricula
                {
                    aluno,
                    aluno2,
                    aluno3
                };

                WriteLine("ALUNOS DA LISTA");
                WriteLine("===============");

                foreach (var a in listaDeMatricula)
                {
                    WriteLine(a.DadosPessoais);
                }
            }
            catch (ArgumentException e) when(e.Message.Contains("não informado"))
            {
                string msg = $"Parâmetro {e.ParamName} não foi informado!";
                await logAplicacao.WriteLineAsync(msg);

                WriteLine(msg);
            }
            catch (ArgumentException)
            {
                string msg = "Parâmetro com problema!";
                await logAplicacao.WriteLineAsync(msg);

                WriteLine(msg);
            }
            catch (Exception e)
            {
                await logAplicacao.WriteLineAsync(e.ToString());

                WriteLine(e.ToString());
            }
            finally
            {
                await logAplicacao.WriteLineAsync("Aplicação terminou.");

                logAplicacao.Dispose();
            }
        }
        public async void Main()
        {
            WriteLine("11. Metodos De Extensão Para Inicializadores De Coleção");
            StreamWriter logAplicacao = new StreamWriter("LogAplicacao.txt");

            try
            {
                await logAplicacao.WriteLineAsync("Aplicação esta iniciando...");

                Aluno aluno = new Aluno("Marty", "Hill", new DateTime(1999, 12, 06))
                {
                    Endereco = "9303 Lyon Driver Hill Valey Ca", Telefone = "444-45643"
                };


                await logAplicacao.WriteLineAsync("Aluno marty Hill foi criado...");

                WriteLine(aluno.Nome);
                WriteLine(aluno.Sobrenome);
                WriteLine(aluno.NomeCompleto);

                WriteLine("Idade: {0}", aluno.GetIdade());
                WriteLine(aluno.DadosPessoais);

                aluno.AdicionarAvaliacao(new Avaliacao(1, "GEO", 8.0));
                aluno.AdicionarAvaliacao(new Avaliacao(1, "MAT", 7.0));
                aluno.AdicionarAvaliacao(new Avaliacao(1, "HIS", 9.0));

                foreach (var avaliacao in aluno.Avaliacoes)
                {
                    Console.WriteLine(avaliacao.ToString());
                }

                Aluno aluno2 = new Aluno("Bart", "Simpson");

                await logAplicacao.WriteLineAsync("Aluno Bart Simpson foi criado...");

                ImprimirMelhorNota(aluno);
                ImprimirMelhorNota(aluno2);

                aluno.PropertyChanged += Aluno_PropertyChanged;

                aluno.Endereco = "Rua Vergueiro, 3185";
                aluno.Telefone = "555-1234";

                Aluno aluno3 = new Aluno("Charlie", "Brown");
                await logAplicacao.WriteLineAsync("Aluno Charilie Brown foi criado...");

                ListaDeMatricula listaDeMatricula = new ListaDeMatricula();

                //listaDeMatricula.Matricula(aluno);
                //listaDeMatricula.Matricula(aluno2);
                //listaDeMatricula.Matricula(aluno3);
            }
            catch (ArgumentException ex) when(ex.Message.Contains("não informado"))
            {
                string msg = $"Paramêtro { ex.ParamName } não foi informado!";
                await logAplicacao.WriteLineAsync(msg);

                Console.WriteLine(msg);
            }
            catch (ArgumentException ex)
            {
                string msg = "Parâmetro com problema!";
                await logAplicacao.WriteLineAsync(msg);

                Console.WriteLine(msg);
            }
            catch (Exception ex)
            {
                string msg = ex.ToString();
                await logAplicacao.WriteLineAsync(msg);

                Console.WriteLine(msg);
            }
            finally
            {
                await logAplicacao.WriteLineAsync("Aplicação terminou.");

                logAplicacao.Dispose();
            }
        }