C# 数组范围

Joh*_*hok -1 c#

我是 C# 新手,无法理解变量的范围。我在课程开始时声明了一个数组:

namespace TextProcessing
{
    public static class Program
    {
        private static string[] ForewordArray;
Run Code Online (Sandbox Code Playgroud)

然后在 Main 中,我初始化并填充数组:

        public static void Main(string[] args)
        {
            try
            {
                try
                {
                    //snip - XML source is opened - snip
                    foreword = XMLnav.SelectSingleNode("//iso:foreword", NSmgr);
                    forewordText = foreword.InnerXml;
                    ForewordTextP = (forewordText.Length - forewordText.Replace("<p", string.Empty).Length) / 2 + 1;
                    CurrFPos = 1;
                    LastFPos = 1;
                    string[] ForewordArray = new string[ForewordTextP];
                    for (var z = 0; z <= ForewordTextP - 1; z++)
                    {
                        LastFPos = CurrFPos;
                        if (z < ForewordTextP - 1)
                        {
                            CurrFPos = Strings.InStr(LastFPos, forewordText, "<p");
                            if (LastFPos > 1)
                            {
                                ForewordArray[z] = Strings.Left(Strings.Mid(forewordText, LastFPos - 1), CurrFPos - LastFPos - 1);
                            }
                            else
                            {
                                ForewordArray[z] = Strings.Left(Strings.Mid(forewordText, LastFPos), CurrFPos - LastFPos - 1);
                            }
                            CurrFPos = CurrFPos + 1;
                        }
                        else
                        {
                            CurrFPos = Strings.InStr(LastFPos, forewordText, "p>");
                            ForewordArray[z] = Strings.Left(Strings.Mid(forewordText, LastFPos-1), CurrFPos - LastFPos + 3);
                        }
                    }
                }
Run Code Online (Sandbox Code Playgroud)

在其他一些文本处理之后,当执行返回到数组时(仍在 Main 中!),它为空:

                    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++)
                            {
                                var TextProcessP = new Para2XML(ForewordArray[y]);
                                forewordbkmkParent.InsertBeforeSelf(TextProcessP.PReturn);
                            }
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

这是因为我在 Try 循环中初始化数组吗?我已经阅读了几十页关于 C# 中变量作用域的内容,但我仍然没有明白。感谢您的任何阅读建议。

小智 5

您在 Main 中声明了一个新的本地数组,并且正在使用数据对其进行初始化。看起来第二个代码块正在访问从未初始化的类级别数组。

在 Main 中,以下行声明了一个名为 ForewordArray 的新字符串数组,因为您以该类型开始这一行。

string[] ForewordArray = new string[ForewordTextP];
Run Code Online (Sandbox Code Playgroud)

为了初始化您在类顶部声明的数组,这应该如下所示:

ForewordArray = new string[ForewordTextP];
Run Code Online (Sandbox Code Playgroud)