C# 从单独文件中的类返回XElement

C# 从单独文件中的类返回XElement,c#,openxml,C#,Openxml,我是C#的新手。我在一个单独的文件中创建了一个类来处理文本。main和text processing类都位于TextProcessing命名空间中。这不是整个课程,只是开始: using System; using System.Linq; using System.Xml.Linq; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Wordprocessing; namespace TextProcessing {

我是C#的新手。我在一个单独的文件中创建了一个类来处理文本。main和text processing类都位于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);
        }
    }
}
foreach(wordDoc.MainDocumentPart.RootElement.subjections()中的var bkmkStart)
{
如果(bkmkStart.Name==“前言文本”)
{
PreforderBKMKParent=bkmkStart.Parent;

对于(var y=0;y,必须写入
textprocesp.PReturn
。即,对象的名称后跟一个点和属性的名称

forewordbkmkParent.InsertBeforeSelf(TextProcessP.PReturn);
局部变量和方法参数的名称通常写在camleCase中。类级变量,即所谓的字段,用下划线+camelCase(即
\u camelCase
)编写。所有其他标识符都写在
PascalCase
(属性、类名称空间等)中

您不需要重复类型的名称两次。编写
var variableName=new TypeName();

我更喜欢对集合使用复数形式。而不是将集合类型附加到名称。例如,
forewords
而不是
forewordArray
。将鼠标悬停在名称上方会显示工具提示中的类型

var processor = new Para2XML(forewords[y]);
forewordbkmkParent.InsertBeforeSelf(processor.PReturn);

谢谢,TextProcessP.PReturn成功了。完成后我会整理美学。