legibilidade de seu codigo. Basicamente o operador ternario substitui um bloco if tradicional em uma unica linha de codigo. Novidade? NOT! Operadores ternarios existem na linguagem C desde a decada de 70. Na pratica funciona assim, imagine o seguinte bloco de codigo:int x = 10;int y = 20;int max;if(x > y)max = x;elsemax = y; Voce pode substitui-lo usando o operador ternario que funciona da seguinte forma (Questao) ? (Acao Positiva) : (Acao Negativa). Vamos ver o exemplo anterior usando operador ternario:int x = 10;int y = 20;int max = (x > y) ? x : y; 2. Operador Null-coalesce ??Quantas vezes voce tem de testar se objetos sao nulos em seu codigo? O operador null-coalesce pode vir a ser util a voce entao. Considere o seguinte codigo:object cache = null;object d = new object();object e = (c != null) ? c : d; Obviamente poderiamos reescrever usando o operador ternario:object cache = null;object d = new object();object e = (c != null) ? c : d; Porem, usando o operador null-coalesce, conseguimos encurtar ainda mais o codigo (se o objeto do lado esquerdo e null, entao ele retornara o valor do lado direito):object cache = null;object d = new object();object e = c ?? d; 3. Inicializadores de ObjetosCansado de perder varias linhas de codigo para ficar setando valores de propriedades? Ou entao cansado de ficar escrevendo dezenas de sobrecargas de construtores? Os construtores auto-implementados que surgiram na versao 3.0 do C# resolvem seu problema e de quebra ainda melhoram a legibilidade de seu codigo. Primeiro vamos ver o jeito tradicional de inicializar um objeto:Cliente c = new Cliente();c.Nome = Joao;c.Endereco = Rua Lima 204; E agora usando os inicializadores de objeto:Cliente c = new Cliente { Nome=Joao, Endereco = Rua Lima 204 }; 4. A diretiva usingUma vez que voce precisa alocar um objeto em memoria um pouco mais pesado que o normal, como streams e arquivos de midia, e importante que seja feito um controle mais rigoroso na hora de liberar a memoria novamente, evitando problemas futuros. Ou seja, sempre temos de fazer tres etapas: criamos o objeto, usamos ele e o descartamos. Isso pode ser ilustrado com o trecho de codigo abaixo:// 1. Alocando o objetoFont font1 = new Font(Arial, 10.0f);try{// 2. Usando o recurso}finally{// 3.Descartando o objetoif (font1 != null)((IDisposable)font1).Dispose();} A diretiva using permite comprimir o codigo anterior em:// alocando o recursousing (Font font1 = new Font(Arial, 10.0f)){// Usando o recurso} // Descarte automatico A diretiva using somente pode ser utilizada em objetos que implementem a interface IDisposable.5. Apelidos para nomes de classes e namespaces muito grandesNomes em C# podem se tornar muito longos. Se voce esta desenvolvendo algo para Microsoft Office, pode estar querendo abrir um processo do Word para criar um documento, o que cria objetos com namespaces enormes. O codigo abaixo, usando a diretiva using para criar um apelido de namespace ilustra outro uso deste canivete suico da programacao C#:using Word = Microsoft.Office.Interop.Word;...Word.Application = new Word.Application() { Visible = True; } 6. Objetos NullablesAlgumas vezes e necessario que suas variaveis possam conter valores nulos,