Ich habe einen seltsamen Fehler. Ich verknüpfe Daten mit Guids, um sie später zu identifizieren und das Original zu ändern.Wie unterscheiden sich diese beiden Guids?
Ich war in der Lage, das wirklich komplexe Problem in eine einfachere zu rekonstruieren, die ich hier fragen kann, daher verwende ich Strings als Daten. Betrachten Sie dies als ein Beispiel:
List<string> testList = new List<string>(new[] { "haha", "wit" });
var list1 = testList.Select(x => new KeyValuePair<Guid, string>(Guid.NewGuid(), x));
var list2 = list1.Select(x => new KeyValuePair<Guid, string>(x.Key, x.Value));
Guid xGuid = list1.First().Key;
Guid yGuid = list2.First().Key;
System.Diagnostics.Debug.Print(xGuid.ToString());
System.Diagnostics.Debug.Print(yGuid.ToString());
System.Diagnostics.Debugger.Break();
Nehmen Sie einfach das Stück Code und führen Sie es aus. Im Ausgabefenster von Visual Studio sollten Sie zwei guids sehen, wie diese beiden:
35ac8c6a-928c-46a9-a614-9d35c2427219
d2175358-85f8-4467-be02-34932f2f4804
Hinweis: Sie sind nicht die gleichen
Nun meine Frage:
Wie oder warum sind sie sogar anders?
Ich erstelle ein guid hier:
var list1 = testList.Select(x => new KeyValuePair<Guid, string>(Guid.NewGuid(), x));
Und dann wird es nur kopiert werden:
var list2 = list1.Select(x => new KeyValuePair<Guid, string>(x.Key, x.Value));
Warum diese unterschiedlich sind?
Wie kann ich das beheben?
Verzögerte Ausführung. Setzen Sie eine 'ToList' am Ende der' list1' Zuweisung und es wird der gleiche Wert sein. Grundsätzlich wird 'Guid.NewGuid' zweimal aufgerufen, wenn Sie' First' auf 'list1' und dann auf' list2' aufrufen. – juharr
Sie erstellen zwei LINQ-Abfragen - jedes Mal, wenn Sie darauf zugreifen, führen Sie den Code erneut im Select-Lambda aus. –
@Damien_The_Unbeliever oh - Scheint wie Lazy-Evaluation rekt mich noch einmal: p – Mafii