我需要浏览一个word文档并检索一些文本框以便修改它们.
但我需要先计算它们,我认为我所写的内容效率很低.
我想知道是否可以简化以下内容:
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();
Run Code Online (Sandbox Code Playgroud)
我想知道在形状中有多少包含"文本框"的元素.
我看到有两种方法可以做到这一点.
使用LINQ语法:
var count = (
from OHeader in documentOld.Sections[1].Headers
from shape in OHeader.Shapes
where shape.Name.Contains("Text Box")).Count();
Run Code Online (Sandbox Code Playgroud)
或者,使用IEnumerable扩展方法:
var count = documentOld.Sections[1].Headers
.SelectMany(h => h.Shapes)
.Count(s => s.Name.Contains("Text Box"));
Run Code Online (Sandbox Code Playgroud)
请注意KeyValuePair,由于您只想计算与某些条件匹配的形状数,因此您的版本效率低下,因为它会不必要地创建列表和s.除此之外,嵌套foreach块对于性能来说是好的,但可能缺乏与LINQ等效的可读性.
此外,请注意我还没有测试上面的代码.
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |