 C# 
-  Os erros mais comuns cometidos pelos iniciantes - II
C# 
-  Os erros mais comuns cometidos pelos iniciantes - II
|  | Hoje veremos alguns dos erros mais comuns cometidos pelos iniciantes e não iniciantes na linguagem C#. | 
Continuando a primeira parte do artigo continuo apresentando alguns dos erros mais comuns cometidos por iniciantes na linguagem C#.
Recursos usados:
4 - Iterando através de uma coleção ao invés de usar a LINQ
A LINQ foi introduzia na versão 3.0 da linguagem C# mudando para sempre a forma como consultar e manipular coleções.
Então se você ainda usa instruções iterativas, como um laço foreach para manipular coleções, pode estar gerando um código ineficiente.
Imagine ter uma coleção com 100.000 clientes e percorrer cada um deles para encontrar um conjunto de dados específicos. Isso não é eficiente.
Assim, ao invés de usar laços para iterar sobre a coleção, use os recursos da LINQ (Language-Integrated Query), que é um recurso da plataforma .NET integrado e projetado para facilitar a consulta de objetos, como coleções e listas.
Veja este exemplo:
| Usando laço foreach | 
| using System; namespace CSharp_Erros1 { class Program { static void Main(string[] args) { var listaClientes = ClienteService.GetClientes(); decimal? taxa = null; foreach (Cliente cliente in listaClientes) { if (cliente.Estado == "SP") { taxa += cliente.Saldo; } } Console.ReadLine(); } } } | 
| Usando LINQ | 
| using System;
namespace CSharp_Erros1
{
    class Program
    {
        static void Main(string[] args)
        {
            var listaClientes = ClienteService.GetClientes();            var clientes = (from cliente in listaClientes  
                                    where cliente.Estado == "SP"  
                                    select cliente.Saldo).Sum();            Console.ReadLine();
        }    }
} | 
Com uma única linha de código LINQ você retorna os clientes desejados sem ter que percorrer a coleção inteira para fazer isso.
Você só tem que ter cautela para cenários onde o desempenho é crítico e, neste caso , comparar o desempenho da consulta LINQ para ver se ela não impacta demais o desempenho.
5 - Usando variáveis de classe pública ao invés de propriedades
Propriedades são um lugar comum para a programação orientada a objetos (OOP), 
mas por que usá-las quando você pode apenas tornar públicas todas as suas 
variáveis de classe ? 
Resposta:  Você pode controlar quem pode definir uma propriedade com 
propriedades da OOP, mas não pode fazer isso com uma variável pública.
|       static void Main(string[] args)
       {
            Teste teste = new Teste();
            //Temos acesso a variável publica e podemos atribuir qualquer valor a ela
            teste.numeroConta = "ZZZZZZZZZ";
            Console.ReadKey();
        }        public class Teste
        {
            public string numeroConta;
            public Teste()
            {
                numeroConta = "XXXXX";
            }
        } | 
Observe que foi definida uma variável pública(numeroConta) que é usada no construtor da classe Teste().
Esse descuido fere o encapsulamento visto que qualquer pode criar uma instância da classe e acessar a variável publica alterando o seu valor.
O correto é usar uma propriedade para definir a variável pública numeroConta conforme o código a seguir:
|         public class Teste()
        {
            private string _numeroConta;
            public string NumeroConta
            {
                 get { return _numeroConta} ;
            }
            public Teste()
            {
                _numeroConta = "XXXXX";
            }
        } | 
Agora temos uma propriedade NumeroConta() que permite somente acessar o valor da variável, alterações não são permitidas.
A classe Teste agora tem controle sobre NumeroConta.
Quando precisar de uma variável global faça isso usando uma propriedade.
Sentiu o drama ???
6 - Não liberar os objetos usados
Vazamentos de memória (também chamados vazamentos de recursos) são um 
problema real para qualquer aplicativo. 
A linguagem  C# fornece uma maneira conveniente de chamar o método
Dispose depois que você terminar de usar um objeto. 
Assim, você nem precisa se lembrar de usá-lo. 
A 
instrução "using" eliminará um objeto e evitará 
vazamentos de memória problemáticos.
Veja esse código ineficiente :
| arquivo.Read (buffer, 0, 100); | 
No código acima, se você não descartar o objeto arquivo, 
viar criar um vazamento de memória no aplicativo. Você pode evitar essa situação 
com a instrução using.
Este código é mais eficiente :
| using (FileStream arquivo 
= File.OpenRead ("numeros.txt")) { arquivo.Read (buffer, 0, 100); } | 
Agora o aplicativo lê um arquivo e descarta o objeto quando ele for concluído.
A instrução using chama o método Dispose no objeto da maneira correta, e também faz com que o próprio objeto saia do escopo assim que Dispose for chamado.
Dentro do 
bloco using, o objeto é somente leitura e não 
pode ser modificado ou reatribuído.
A instrução using garante que Dispose seja 
chamado mesmo se ocorrer uma exceção enquanto você estiver chamando 
métodos no objeto.
Na terceira parte do artigo vou continuar a falar sobre os erros mais comuns.
Aguarde...
'Agora é o juízo deste mundo; agora será 
expulso o príncipe deste mundo.
E eu, quando for levantado da terra, todos atrairei a mim.
E dizia isto, significando de que morte havia de morrer.'
João 12:31-33
| Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? | 
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a 
Objetos com VB .NET

https://msdn.microsoft.com/pt-br/library/84787k22(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/858x0yyx(v=vs.110).aspx
https://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make