Laden...

OfficeOpenXml und Bookmark -> Kopf wiill auf Tischkante

Erstellt von chriscolm vor 11 Jahren Letzter Beitrag vor 11 Jahren 896 Views
C
chriscolm Themenstarter:in
112 Beiträge seit 2009
vor 11 Jahren
OfficeOpenXml und Bookmark -> Kopf wiill auf Tischkante

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

M
53 Beiträge seit 2008
vor 11 Jahren

Hallo chriscolm,

die ID ist vom Typ StringValue und du versuchst unterschiedliche Objekte zu vergleichen. Mit ID.Value sollte es funktionieren.

Gruß
muhtanten

C
chriscolm Themenstarter:in
112 Beiträge seit 2009
vor 11 Jahren

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.