2016-11-09 7 views
-2

Verständnis habe ich einen Code wie dies jetztVerzögerte Auswertung in 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); 
     } 
     } 
    } 

beim Debuggen, bevor ein Element hinzugefügt, und wenn ich die Maus über die Variable setzen, i das Ergebnis wie diese

enter image description here

erhalten

nach einige Elemente in den Listen hinzufügen, wenn ich über die Variable schweben bekomme ich das Ergebnis wie dieses

enter image description here aber nach Lazy Execution-Konzept lädt es die Daten, wenn es die Foreach-Methode erreicht, dann warum die Daten bereits geladen und im Debugger gesehen werden. Fehle ich etwas zum Verständnis Lazy Evaluation UPDATE 1 Nach dem vorherigen in Bezug auf meinen Screenshot, wenn Sie auf "Ergebnisse Ansicht" gezwungen, um die Daten dann zu laden, hier ist meine zweite scenerio, wo ich nur die Daten laden, die gesehen werden können bilden Sie den Screenshot

enter image description here aber wenn der Debugger zum nächsten Element bewegt, erhöht sich die Anzahl.

enter image description here ist es nicht angenommen, die Daten zu laden, wenn ein Anruf mit einer foreach erfolgt? Bitte hilf mir zu verstehen, wie die Lazy Evaluation funktioniert. Vielen Dank.

+1

Der Code, den Sie in Ihrer Frage sieht aus wie der Screenshot nichts zitiert habe du hast es gezeigt. Bitte geben Sie eine [mcve], und zeigen Sie die Ausgabe von * that * (das kann nur wieder Text sein - es ist keine Notwendigkeit für einen Screenshot überhaupt) –

+0

ok, nur eine Sekunde ... Vielen Dank für die Hilfe –

+2

'Concat' Ändert 'Zahlen' nicht, es gibt * eine neue Liste zurück, die geändert wird. Wahrscheinlich willst du 'result = numbers.Concat (num2);' anstelle von 'numbers.Concat (num2);'. – Quantic

Antwort

2

Es ist, weil Sie nicht die Ergebnisse der Verkettung etwas zuweisen:

numbers.Concat(num2); 

das sein sollte:

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

Dies wird nicht kompiliert, da 'Zahlen' als' int [] 'anstelle von' IEnumerable 'eingegeben wird. –

+0

@MichaelLiu bitte versuchen Sie den Code würden Sie erstaunt sein –

+0

@MichaelLiu Sie haben Recht, danke. Ich habe es behoben. – itsme86