Skip to content

Latest commit

 

History

History
96 lines (85 loc) · 3.58 KB

Anotacoes.md

File metadata and controls

96 lines (85 loc) · 3.58 KB

Nulo

  • Um tipo de valor nulo permite representar o tipo da variável e adicionalmente, o valor nulo.
    bool  = true, false
    bool? = true, false, null
  • Implementando
  • Usar HasValue sempre quando usar tipos nulos
    bool? desejaReceberEmail = true;
    if(desejaReceberEmail.HasValue && desejaReceberEmail.Value){
        Console.WriteLine("O usuário optou por receber o e-mail");
    }else{
        Console.WriteLine("O usuário não respondeu ou optou por não receber o e-mail");
    }

Tipos de Nulo em propriedades

  • Implementando
    using Dotnet_Tipos_Especiais.Models;
    using Newtonsoft.Json;

    var conteudoArquivo = File.ReadAllText("Arquivos/listaVendas.json");
    List<Venda> listaVendas = JsonConvert.DeserializeObject<List<Venda>>(conteudoArquivo);
    foreach (var venda in listaVendas)
    {
        Console.WriteLine($"Id: {venda.Id}, Produto: {venda.Produto}, Desconto: {(venda.Desconto.HasValue ? venda.Desconto.Value : "")}");
    }

Tipo anonimo

  • Muito semelhante a uma tupla
  • Não pode retornar em métodos
    var tipoAnonimo = new {Nome="Enzo", Sobrenome= "Gabriel", Altura = 1.95};
    Console.WriteLine($"Nome: {tipoAnonimo.Nome}");
    Console.WriteLine($"Sobrenome: {tipoAnonimo.Sobrenome}");
    Console.WriteLine($"Altura: {tipoAnonimo.Altura}");

Tipo anonimo em coleção

  • ideal para retorno de informações do banco de dados
    using Dotnet_Tipos_Especiais.Models;
    using Newtonsoft.Json;
    string conteudoArquivo = File.ReadAllText("Arquivos/listaVendas.json");
    List<Venda> listaVendas = JsonConvert.DeserializeObject<List<Venda>>(conteudoArquivo);

    var listaAnonimo = listaVendas.Select(x=> new{x.Produto,x.Preco,x.Desconto} );

    foreach (var venda in listaAnonimo)
    {
        Console.WriteLine($"Produto: {venda.Produto}, Preço: {venda.Preco}, Desconto: {venda.Desconto}");
    }

Tipo dinâmico

  • cuidado ao usar pois se colocar o tipo errado pode receber uma exceção
    dynamic variavelDinamica = 4;
    Console.WriteLine($"Tipo da variável: {variavelDinamica.GetType()}, Valor: {variavelDinamica}");
    variavelDinamica = "Texto";
    Console.WriteLine($"Tipo da variável: {variavelDinamica.GetType()}, Valor: {variavelDinamica}");
    variavelDinamica = true;
    Console.WriteLine($"Tipo da variável: {variavelDinamica.GetType()}, Valor: {variavelDinamica}");

Classe Genérica

  • As classes genéricas encapsulan operações que não são específicas de um determinado tipo de dados.
   MeuArray<int> arrayInteiro = new MeuArray<int>();
   arrayInteiro.AdicionarElementoArray(30);
   Console.WriteLine(arrayInteiro[0]);

Métodos de extensão

  • Os métodos de extensão permitem que você adicione tipos existentes sem criar um novo tipo derivado, recompilar ou , caso contrário, modificar o tipo original
  • Extende o comportamento do inteiro this int
    using Dotnet_Tipos_Especiais.Models;
    int numero = 20;
    bool par = false;

    par = numero.EhPar();

    string mensagem = "O número " + numero + " é " + (par ? "Par": "Impar");
    Console.WriteLine(mensagem);

Referências

  1. .[https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/builtin-types/nullable-value-types]
  2. .[https://www.tutorialsteacher.com/csharp/csharp-dynamic-type]
  3. .[https://www.tutorialsteacher.com/csharp/csharp-anonymous-type]
  4. .[https://www.macoratti.net/16/10/c_generic1.htm]
  5. .[https://www.c-sharpcorner.com/UploadFile/84c85b/using-generics-with-C-Sharp/]
  6. .[https://www.tutorialsteacher.com/csharp/csharp-extension-method]