Não encontro o Metodo PostAsJsonAsync do HttpClient

Esse metodo é uma extensão da classe HttpClient, existem diversos tutoriais que utilizam esse metodo mais não disponibilizam de onde buscar, esse metodo está na Dll System.Net.Http.Formatting que pode ser encontrada nos assemblies do framework.

Referencia

Anúncios

Como descobrir o tamanho de um arquivo

Para descobrir o tamanho  de um arquivo com C# basta utilizar a classe FileInfo, e utilizar a propriedade Length que retorno o tamanho em bytes do arquivo, ai basta dividir por 1024 quantas vezes precisar para ter o tamanho na proporção que precisa, esse e um exemplo do calculo ate GB:

FileInfo fi =new FileInfo("nomeArquivo.doc");
 var TamanhoEmKb = (fi.Length/1024F);
 var TamanhoEmMb = ((fi.Length/1024F)/1024F);
 var TamanhoEmGb = (((fi.Length/1024F)/1024F)/1024F);

Diferença entre uma classe e um struct(Reference Type vs Value Type)

Você já teve o problema de alterar o valor de uma variável e outra variável também ter o valor alterado, se já teve esse problema continue lendo esse post.

Qualquer classe criada em C# é um reference type, e qualquer struct é uma Value Type para entender melhor o que significa isso vamos a uma explicação mais especifica desses tipos:

Reference Type:  Na variável será armazenado apenas um endereço da memoria aonde está o objeto, e mão a variável por completa, esses tipos de variáveis, as vezes possuem o método Clone exatamente para criar uma copia do objeto e retornar a referencia desse segundo objeto na variável. Ao atribuir a uma variável o valor de outra variável reference type, o que está sendo armazenado nessa nova variável é o endereço da mesma variável com isso ao alterar uma a outra também se mostra alterada para exemplificar o conceito de Reference Type:

 

Qualquer classe(class) criada é do tipo reference type, e o tipo String também é reference Type

 

Value Type: Os objetos Value type se comportam da forma oposta aos Reference Type, um objeto Value Type armazena o objeto inteiro nele, e com isso quando esse valor é atribuido a outra variavel a primeira variavel possui um objeto e a segunda possui um segundo objeto, como mostra a imagem a seguir:

 

Qualquer estrutura(struct) criada é do tipo value type, e os tipos primitivos(int,long,bool, etc…) e o DataTime também são value Type.

 

 

 

Pergunta: Uma variável de um enumerado é Value Type ou Reference Type?

Resposta: ela é do tipo Value Type

 

Extension Methods

Definição:Métodos extensores para criação de métodos em determinado tipo de Objeto, Interface ou enumerado, não obrigando a ter o fonte do objeto que será extendido.O Conceito de extension methods surgiu junto com LINQ, na versão 3.5 do framework, foi criado devido a necessidade da microsoft colocar metodos em determinadas interfaces, um exemplo é os metodos LINQ(Where, Select ou Join) eles são extension methods da interface IEnumareble<T>.Ao Criar um metodo de extensão em um tipo e esse tipo já possui um metodo com a mesma assinatura, o metodo de extensão não será utilizado, será utilizado o metodo real do tipo.

A ideia é muito simples, criar metodos para um determinado tipo independente da origem do tipo em questão.

Na Pratica: Aonde isso irá me ajudar no trabalho do dia-a-dia correto? Uma aplicação Simples é utilizar para validar o conteúdo de um controle por exemplo:

  • Em um TextBox você poderia colocar o metodo IsEmpty() que iria verificar se o conteúdo do TextBox é vazio, ou o método IsNumber() no mesmo TextBox para validar se o conteúdo é apenas numérico.
  • Em um enumerado qualquer é possivel colocar um metodo para um objeto a partir do valor do enumerado.
Codificação:
Crie uma classe publica estática( precisa ser estática) e adiciona um método estático normalmente, porem adicionar a palavra this no primeiro parâmetro indicando de qual tipo será essa extensão, segue o codigo exemplificado:

 public static class Extensions
    {
        public static bool EhPar(this int numero)
        {
            return numero % 2 == 0;
        }

        public static bool EhImpar(this int numero)
        {
            return numero % 2 != 0;
        }
    }

Os métodos irão aparecer nos objetos desse tipo, nesse caso em qualquer int igual na imagem

Como ira ficar na IDE

Código de exemplo de utilização dos métodos


            int par = 3;
            bool IsImpar = par.EhImpar();
            bool IsPar = par.EhPar();