C# 简单-循环-C的数组内部不工作

C# 简单-循环-C的数组内部不工作,c#,C#,我有这个代码试图输出一个已经输入的列表,并要求一个匹配的等级。 数组工作,当我检查它的长度时,它与输入匹配 我已经在我的one类中声明了字符串数组 static string[] nameArray; 然后,我有两个按此顺序工作的函数: static void ConvertListToArray() { string[] nameArray = names.ToArray(); arrayLength = nameArray.Length; } static

我有这个代码试图输出一个已经输入的列表,并要求一个匹配的等级。 数组工作,当我检查它的长度时,它与输入匹配

我已经在我的one类中声明了字符串数组

static string[] nameArray;
然后,我有两个按此顺序工作的函数:

static void ConvertListToArray()
{
    string[] nameArray = names.ToArray();
    arrayLength = nameArray.Length;
}
       
static void AskNameForGrade()
{
    for (int i = 0; i < arrayLength; i++)
    { 
        Console.WriteLine($"Please enter grade for {nameArray[i]}");
    }
}
给出错误的部分是{nameArray[i]}

错误消息是

System.NullReferenceException:'对象引用未设置为 对象的实例。”

我认为数组是空的, 但是如果我在它等于输入ie>1之前检查大小


我相信这很简单,但如果您能提供任何帮助,我们将不胜感激。

忽略任何其他问题,问题可能是静态nameArray字段尚未初始化,但是您正在初始化具有相同名称的局部作用域变量。这就是为什么静态成员arrayLength具有您假定的值,而静态成员nameArray未初始化且为null。它从未被设定过

我相信会有一个编译器警告提醒你这个问题

局部变量“nameArray”隐藏字段字符串[]等等等等

解决方法是删除局部变量

static string[] nameArray;

static void ConvertListToArray()
{
    //string[] nameArray = names.ToArray();
    nameArray = names.ToArray(); // set your static member instead
    arrayLength = nameArray.Length;
}

忽略任何其他问题,问题可能是静态nameArray字段尚未初始化,但是您正在初始化具有相同名称的局部作用域变量。这就是为什么静态成员arrayLength具有您假定的值,而静态成员nameArray未初始化且为null。它从未被设定过

我相信会有一个编译器警告提醒你这个问题

局部变量“nameArray”隐藏字段字符串[]等等等等

解决方法是删除局部变量

static string[] nameArray;

static void ConvertListToArray()
{
    //string[] nameArray = names.ToArray();
    nameArray = names.ToArray(); // set your static member instead
    arrayLength = nameArray.Length;
}

对于OP-这是变量声明和赋值之间差异的一个很好的例子。字符串[]nameArray=names.ToArray;两者都有。嗨,迈克尔-只是一个关于拼写的简短说明。我注意到你的帖子经常拼写错误。不幸的是,这个词的英语规则有点笨拙!一个很好的经验法则是,如果你使用的是它的缩写,那么它需要一个撇号来正确拼写。另一方面,如果你在狗和它的骨头的所有权上下文中使用这个词,那么就不应该使用撇号。这就是为什么你的拼写检查器可能看不到它的原因。@halfer谢谢你,我注意到你修复了我的很多帖子。我肯定会把英语翻译成巴斯塔迪语,但我会记住这一点,因为我知道我通常会选择错误的语言。例如,OP-这是变量声明和赋值之间区别的一个很好的例子。字符串[]nameArray=names.ToArray;两者都有。嗨,迈克尔-只是一个关于拼写的简短说明。我注意到你的帖子经常拼写错误。不幸的是,这个词的英语规则有点笨拙!一个很好的经验法则是,如果你使用的是它的缩写,那么它需要一个撇号来正确拼写。另一方面,如果你在狗和它的骨头的所有权上下文中使用这个词,那么就不应该使用撇号。这就是为什么你的拼写检查器可能看不到它的原因。@halfer谢谢你,我注意到你修复了我的很多帖子。我肯定会把英语说得很糟糕,不过我会记住这一点,因为我知道我通常会选错一种,。