C# C数组的作用域

C# C数组的作用域,c#,C#,我是C语言的新手,在理解变量的范围方面有困难。我在类的开头声明了一个数组: namespace TextProcessing { public static class Program { private static string[] ForewordArray; 然后在Main中,我初始化并填充数组: public static void Main(string[] args) { try

我是C语言的新手,在理解变量的范围方面有困难。我在类的开头声明了一个数组:

namespace TextProcessing
{
    public static class Program
    {
        private static string[] ForewordArray;
然后在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);
                        }
                    }
                }
在其他一些文本处理之后,当执行返回到仍在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);
                            }
                        }
                    }
发生这种情况是因为我在Try循环中初始化了数组吗?
我已经读了几十页关于C中变量作用域的文章,但我还是不明白。感谢您的阅读建议。

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

在Main中,下一行声明了一个名为forwardArray的新字符串数组,因为这一行以类型开头

string[] ForewordArray = new string[ForewordTextP];
为了初始化在类顶部声明的数组,应该如下所示:

ForewordArray = new string[ForewordTextP];

范围实际上相当简单。如果一个类包含一个变量,那么该类中的任何东西都会看到它。但是,该类/块之外的任何对象都无法访问该变量

它就像一个下拉列表的层次结构。单击下拉列表,您将看到它包含的所有内容。如果它包含其他下拉列表,请单击这些下拉列表,您将看到它们包含的内容。每个下拉列表只知道它包含的内容。这意味着包含所有内容的下拉列表,或者换句话说,包含所有内容的下拉列表可以看到所有内容

当变量以相同的方式命名时,会有一个复杂的问题。如果一个类包含一个变量,而其中的一个类包含另一个同名变量,则其中的类将重写该变量的名称,因为它在上下文中更精确


正在写入字符串[]前言数组=新建。。。声明一个新的数组变量。因此,包含类程序的PrefordArray被子类的PrefordArray覆盖。符号字符串[]创建一个字符串数组类型的新变量。要初始化变量,只需使用变量名forforderArray。

请将您的问题包含为的源代码,其他人可以编译和测试这些源代码。不要拆分代码,可能会留下重要的代码。旁注:变量名和字段名应该以小写开头,这样就不会与以大写开头的类名、方法名或属性名混淆。