mesmo quando e um simples inteiro. Isto ocorre com mais frequencia quanto trabalhos com mapeamento objeto-relacional, pois na maioria dos bancos de dados sempre teremos tabelas com colunas que podem conter valores nulos. Para tornar um variavel comum em uma variavel que aceita null, basta adicionar um ? ao final do tipo e pronto!Nullable x = null;int? x = null; Os nullable-types surgiram na versao 2.0 do framework e podem ser invocados das duas formas exibidas anteriormente.7. Propriedades AutomaticasNo C# 3.0 ganhamos as propriedades automaticas. Geralmente a maioria das propriedades das classes sao apenas exposicoes de atributos privados ao restante do sistema. Dificilmente elas possuem alguma logica ou verificacao que realmente exija a criacao de um atributo privado e de uma propriedade publica. Desta forma, para que ficar repetindo gets e sets sempre iguais, retornando o valor de um atributo privado? Desta forma, as propriedades automaticas vieram para agilizar a tarefa de criacao de propriedades que nada mais fazem do que retornar ou receber valores. Vale salientar que em tempo de compilacao vao ser gerados atributos privados para onde os valores dessas propriedades ficarao armazenados. Ous eja, nao muda nada para o sistema, apenas para o programador.public class Pessoa{private string _primeiroNome;public string PrimeiroNome{get { return _primeiroNome; }set { _primeiroNome= value; }}} O bloco de codigo anterior mostra o jeito antigo de fazer as coisas. O bloco seguinte mostra as propriedades automaticas:public class Pessoa{public string PrimeiroNome { get; set; }} Para quem acha que criar propriedades automaticas publicas e a mesma coisa que criar atributos publicos, esta redondamente enganado. O metodo DataBind presente na maioria dos controles de exibicao de dados somente efetua o Bind sobre propriedades publicas e nunca sobre atributos de classe. Desta forma, se pretende que sua classe possa ser exibida em controles deste tipo, e bom usar as propriedades corretamente.8. Inferencia de TiposEsta e outra dica que deve ser usada com cuidado. Eu particularmente uso apenas quando estou trabalhando com namespaces desconhecidos ou com LINQ e Lambda Expressions. Sendo o C# uma linguagem fortemente tipada, e natural que aja toda uma preocupacao com escolher o melhor tipo para as variaveis e objetos que serao utilizadas. Da mesma forma, e importante conhecer os diversos tipos existentes quando se esta manipulando metodos de terceiros. A inferencia de tipos permite que voce deixe de escrever o tradicional codigo:string MyString = Hello World; Desta forma:var MyString = Hello World; Perai, igual no Javascript? NOT! Mesmo com a inferencia de tipos C# ainda e uma linguagem fortemente tipada e uma vez que a inferencia esteja concluida (i.e. a variavel recebeu um valor) o tipo de seu conteudo jamais podera ser alterado. Novamente, isto e apenas a nivel de programacao. Quando o compilador entra em acao, ele atribui os tipos corretos conforme a necessidade, nos poupando do trabalho de decorar os mais variados tipos e retornos de chamadas de metodos. O objeto do tipo inferido pode perfeitamente ser utilizado como um objeto normal, como o codigo a seguir nos mostra:var elencoSenior = Empregados.Where(s => s.Idade > 35);foreach(var membro in elencoSenior)Console.WriteLine(Nome: {0} Idade: {1},membro.Nome, membro.Idade); Mas