2016-11-09 2 views
-2

J'ai un code comme celui-ciComprendre l'évaluation paresseuse en C#

class Context 
    { 
     public List<Student> lists; 
     public Context() 
     { 
      lists = new List<Student>() { 
       new Student { Name="foo",Standard="first",subjects=new Subjects { Geography=50,History=81,Science=70} }, 
       new Student { Name="carl",Standard="first",subjects=new Subjects { Geography=40,History=51,Science=50} }, 
       new Student { Name="ben",Standard="first",subjects=new Subjects { Geography=30,History=91,Science=60} }, 
       new Student { Name="peter",Standard="first",subjects=new Subjects { Geography=80,History=71,Science=40} }    
      }; 
     } 
    } 
    class Client 
    { 
     static void Main(string[] args) 
     { 
      List<Student> lists = new Context().lists; 
      var result = lists.Where(x => x.subjects.History > 60); 
      lists.Add(new Student { Name = "tan", Standard = "first", subjects = new Subjects { Geography = 40, History = 81, Science = 60 } }); 
      lists.Add(new Student { Name = "ran", Standard = "first", subjects = new Subjects { Geography = 30, History = 70, Science = 50 } }); 
      lists.Add(new Student { Name = "ranky", Standard = "first", subjects = new Subjects { Geography = 20, History = 31, Science = 40 } }); 
      lists.Add(new Student { Name = "franky", Standard = "first", subjects = new Subjects { Geography = 50, History = 51, Science = 30 } }); 
      foreach (var data in result) { 
      Console.WriteLine(data); 
     } 
     } 
    } 

maintenant pendant le débogage, avant d'ajouter un élément et quand je placer la souris sur la variable, je reçois le résultat comme celui-ci

enter image description here

après avoir ajouté quelques éléments à la liste, quand je passe la souris sur la variable i obtenir le résultat comme celui-ci

enter image description here mais selon le concept de Lazy Execution, il charge les données lorsqu'il atteint la méthode foreach, alors pourquoi les données sont-elles déjà chargées et visibles dans le débogueur? Suis-je manquant quelque chose vers la compréhension Évaluation paresseux MISE À JOUR 1 Selon la précédente concernant ma capture d'écran, si vous cliquez sur "Résultats vue" forcé de charger les données alors, voici mon deuxième scenerio où je viens de charger les données, ce qui peut être vu former la capture d'écran

enter image description here mais lorsque le débogueur passe à l'élément suivant, le nombre augmente.

enter image description here n'est-ce pas supposé charger les données quand un appel est fait en utilisant un foreach? Aidez-moi à comprendre comment fonctionne l'évaluation paresseuse. Je vous remercie.

+1

Le code que vous avez cité dans votre question ne ressemble en rien la capture d'écran vous avez montré. S'il vous plaît fournir un [mcve], et montrer la sortie de * cela * (qui peut juste être texte à nouveau - il n'y a pas besoin d'une capture d'écran du tout) –

+0

ok, juste une seconde ... merci pour l'aide –

+2

'Concat' ne modifie pas 'numbers', il * renvoie * une nouvelle liste qui est modifiée. Vous voulez probablement, 'result = numbers.Concat (num2);' à la place de 'numbers.Concat (num2);'. – Quantic

Répondre

2

C'est parce que vous n'êtes pas assignez les résultats de la concaténation à quoi que ce soit:

numbers.Concat(num2); 

Cela devrait être:

numbers = numbers.Concat(num2).ToArray(); 
+0

Cela ne compilera pas puisque 'numbers' est tapé comme' int [] 'au lieu de' IEnumerable '. –

+0

@MichaelLiu s'il vous plaît essayer le code que vous seriez étonné –

+0

@MichaelLiu Vous avez raison, merci. Je l'ai réparé. – itsme86