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:
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..
Na verdade ai não usa LINQ, da pra rodar no .Net 2.0
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..
Não, na verdade ai não acontece isso
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?
Respondido por email
Postar um comentário