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