Moinsen,
nachdem ich feststellen musste, dass LazyEvaluation im Zusammenhang mit der Bearbeitung von OpenXml offenbar sehr böse ist, hier noch eine Sache, die zwar gelöst, aber nicht verstanden ist:
var bookmarks = subDoc.MainDocumentPart.Document.Body.Descendants<BookmarkStart>();
foreach (var bkStart in bookmarks) {
string sid = bkStart.Id;
var debg = subDoc.MainDocumentPart.Document.Body.Descendants<BookmarkEnd>().FirstOrDefault(b => b.Id == bkStart.Id);
var bkEnd = subDoc.MainDocumentPart.Document.Body.Descendants<BookmarkEnd>().FirstOrDefault(b => b.Id == sid);
if (bkEnd != null) {
...
}
if (debg != null) {
throw new Exception();
}
Warum muss ich erst die Bookmark-id in einen string packen, um anschließend mit der Bookmark-Id vergleichen zu können? Die Exception wird nie geworfen, das heißt, bkEnd.Id == bkStart.Id ist immer false (auch wenn die Werte gleich sind), wohingegen bkEnd.Id == sid bei gleichen Werten auch true ergibt...Auch wenn ich mit Equals vergleiche. Hrmpf....
Grüße
Christian
Hallo chriscolm,
die ID ist vom Typ StringValue und du versuchst unterschiedliche Objekte zu vergleichen. Mit ID.Value sollte es funktionieren.
Gruß
muhtanten
Ok, das kann ich soweit nachvollziehen. Aber string und Id sind ja nicht nur unterschiedliche Objekte, sondern auch noch unterschiedliche Typen! Da ist an der einen Stelle m.E. der =-Operator so implementiert, dass er sich verhält, wie erwartet und an anderer Stelle nicht.