c# - Simplify double foreach instruction -
i need browse word document , retrieve text boxes in order modify them.
but need count them before, , think wrote inefficient.
i'd know if it's possible simplify following:
foreach (microsoft.office.interop.word.headerfooter oheader in documentold.sections[1].headers) { foreach (microsoft.office.interop.word.shape shape in oheader.shapes) { if (shape.name.contains("text box")) { listtextbox.add(new keyvaluepair<string, string>(shape.name.tostring(), shape.textframe.textrange.text.tostring())); } } } int count = listtextbox.count();
i want know how many elements contain "text box" in shapes.
i see 2 ways can this.
using linq syntax:
var count = ( oheader in documentold.sections[1].headers shape in oheader.shapes shape.name.contains("text box")).count();
or, using ienumerable extension methods:
var count = documentold.sections[1].headers .selectmany(h => h.shapes) .count(s => s.name.contains("text box"));
note version inefficient in creates list , keyvaluepair
s needlessly, given want count number of shapes match condition. other that, nested foreach
blocks fine performance, may lack in readability versus linq equivalents.
also, please note have not tested code above.
Comments
Post a Comment