我是C#的新手。我在单独的文件中创建了一个用于处理文本的类。主类和文本处理类都在TextProcessing命名空间中。这不是整个课程,只是开始:
using System;
using System.Linq;
using System.Xml.Linq;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Wordprocessing;
namespace TextProcessing
{
public class Para2XML
{
private Paragraph XMLP;
public Para2XML(string PText)
{
var xmlParagraph = XElement.Parse(PText);
var XMLP = (Paragraph)TransformElementToOpenXml(xmlParagraph);
}
public Paragraph PReturn
{
get { return XMLP; }
}
private static OpenXmlElement TransformElementToOpenXml(XElement element)
{
return element.Name.LocalName switch
{
"p" => new Paragraph(element.Nodes().Select(TransformNodeToOpenXml)),
"em" => new Run(new RunProperties(new Italic()), CreateText(element.Value)),
"b" => new Run(new RunProperties(new Bold()), CreateText(element.Value)),
_ => throw new ArgumentOutOfRangeException()
};
}
回到我的程序,这是我实例化该类的地方:
foreach (var bkmkStart in wordDoc.MainDocumentPart.RootElement.Descendants<BookmarkStart>())
{
if (bkmkStart.Name == "ForewordText")
{
forewordbkmkParent = bkmkStart.Parent;
for (var y = 0; y <= ForewordArray.Length - 1; y++)
{
Para2XML TextProcessP = new Para2XML(ForewordArray[y]);
forewordbkmkParent.InsertBeforeSelf(PReturn);
}
}
}
PReturn在Para2XML类中是公共的,但它的作用就像在主类中超出范围。在主类中,红色下划线显示在PReturn下,并带有消息“名称'PReturn'在当前上下文中不存在”。如果在主类中声明PReturn,则会得到“不要声明可见的实例字段”。我不知道如何从单独文件中的类将XElement返回到程序。
我希望有人指出我的错误。谢谢!
您必须写TextProcessP.PReturn
。即,对象的名称后跟一个点和属性的名称。
forewordbkmkParent.InsertBeforeSelf(TextProcessP.PReturn);
局部变量的名称和方法参数通常用camleCase编写。类级别变量,即所谓的字段,用下划线+ camelCase(即_camelCase
)编写。所有其他标识符都写在PascalCase
(属性,类名称空间等)中。
您无需重复输入类型名称两次。写var variableName = new TypeName();
我更喜欢将复数形式用于集合。而不是将集合类型附加到名称上。即forewords
而不是forewordArray
。悬停在名称上方会在工具提示中显示类型。
var processor = new Para2XML(forewords[y]);
forewordbkmkParent.InsertBeforeSelf(processor.PReturn);