in C#

C# – Dica: yield, evitando coleções temporárias

O yield é um recurso muito útil do C#, ele está disponível desde a versão do C# 2.0, e com ele é possível evitar a criação de coleções temporárias, as quais são muito comuns em métodos que retornam uma lista.

No exemplo abaixo, temos uma método que retorna um IEnumerable de strings.

Sem yield

static IEnumerable<string> LoadNames()
{
    List<string> retorno = new List<string>();
        
    for (int i = 0; i < 10; i++)
    {
        retorno.Add(string.Format("Usuario {0}", i));
    }
               
    return retorno;
}

Com yield

static IEnumerable<string> LoadNames()
{
    for (int i = 0; i < 10; i++)
    {
        yield return string.Format("Usuario {0}", i);
    }
}

 

Neste outro exemplo, temos um método que retorna uma IEnumerable de SqlParameter:

Sem yield

static IEnumerable<SqlParameter> LoadParametros()
{
    List<SqlParameter> retorno = new List<SqlParameter>();
    retorno.Add(new SqlParameter() { ParameterName = "Id", Value = 123 });
    retorno.Add(new SqlParameter() { ParameterName = "Nome", Value = "Rodolfo" });

    return retorno;
}

 

Com yield

static IEnumerable<SqlParameter> LoadParametros()
{
    yield return new SqlParameter() { ParameterName = "Id", Value = 123 };
    yield return new SqlParameter() { ParameterName = "Nome", Value = "Rodolfo" };
}

 

Bom espero que este post seja util, estou a disposição para dúvidas, criticas e sugestões.

Abs

Rodolfo