从单独文件中的类返回XElement

问题描述 投票:0回答:1

我是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返回到程序。

我希望有人指出我的错误。谢谢!

c# openxml
1个回答
1
投票

您必须写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);
© www.soinside.com 2019 - 2024. All rights reserved.