Pesquisar

16 de jul de 2008

Desafio I - Dynamic Iterators

Vou propor um desafio: Qual o resultado do seguinte código? E por quê?

    public class MainClass
    {
        static bool DeveMudar = false;
 
        public static void Main()
        {
            Console.WriteLine(DeveMudar);
            MetodoQualquer();
            Console.WriteLine(DeveMudar);
            Console.ReadKey();
        }
 
        public static IEnumerable<int> MetodoQualquer()
        {
            DeveMudar = true;
            yield return 1;
        }
    }

6 comentários:

Higor César disse...

Fala cara, testei aqui o aplicativo e o resultado retornado foi "false".. O resultado ocorreu por causa da deferred execution do linq.Quando o tipo tratado é um IEnumarable e o retorno do método não é utilizado o linq posterga a execução para quando a execução for realmente necessária.Ai sabendo disso fiz o teste abaixo e os valores retornados foram diferentes.
List(int) lst1 = MetodoQualquer().ToList();


ps:troquei o caracter da lista pois o blogger não permite
Ai se quiser ler eu fiz um pequeno post sobre essa execução.Grande abraço..

Felipe Fujiy Pessoto disse...

Na verdade ai não usa LINQ, da pra rodar no .Net 2.0

Higor César disse...

Fala cara, verdade que não usa. mas em parte o IEnumarable foi adicionado para dar suporte ao LINQ. claro que não só pra isso mas com o LINQ depende do IEnumarable para fazer muita coisa legal. Mas de qualquer forma a resposta é a execução postergada correto?
Abraço..

Felipe Fujiy Pessoto disse...

Não, na verdade ai não acontece isso

Higor César disse...

Não, jurava que o motivo era a execução postergada.No LINQ em ação ela faz isso que você mostrou e explica com a execução postergada..Qual o motivo então?

Felipe Fujiy Pessoto disse...

Respondido por email