【问题标题】:Multidimensional Array Object reference not set to an instance of an object [duplicate]多维数组对象引用未设置为对象的实例[重复]
【发布时间】:2017-10-12 04:12:26
【问题描述】:

我正在学习如何处理多维数组,但在尝试填充数组时遇到了这个引用错误。有人有什么想法吗?

 public static string[][] itemLines;


    public static void readTxtFile()
    {
        try
        {
            string[] lines = new string[420];

            using (StreamReader sr = new StreamReader(TextFileDirectory.fileDirectoryThree))
            {
                int counter = 0;
                while (!sr.EndOfStream)
                {
                    lines[counter] = sr.ReadLine(); //All lines are in an array index
                    counter++;
                }
            }

            for (var i = 0; i < lines.Length; i++)
            {
                itemLines[i] = lines[i].Split('Ü'); //All lines are in multiplexed array
                Console.WriteLine("Line " + i + "'s first value is: " + itemLines[i][0]);         
            }

            }
        }      
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
    }

这让我很生气。我似乎无法弄清楚这一点。

编辑:我找到了答案。我必须有一个计数器变量并用它正确声明数组。

【问题讨论】:

  • 你在哪一行得到错误?
  • itemLines[i] = lines[i].Split('Ü'); //所有行都在复用数组中
  • 如果lines[i] 为空,那么Split 方法可能会抛出NRE。根据StreamReader 读取的文件内容,可能有空字符串。
  • 尝试在第二个for循环的 using 和 use 之外声明计数器

标签: c# arrays visual-studio multidimensional-array


【解决方案1】:

数组是一个对象。所有对象都需要初始化。您在开始时创建的对象public static string[][] itemLines 从未被初始化。您已经创建了一个二维数组,它是一个数组数组。 itemLines[i] = .. 访问数组itemLines 对象的i 元素(这又是一个数组数组)。换句话说,你所做的就是这样:

int[] i;
i[0] = 8;

上述方法不起作用,因为我从未初始化过。

示例初始化:

string[][] myArr = new string[9][];
string[][] myArr2 = new string[9][8];

【讨论】:

    【解决方案2】:

    首先你需要初始化数组

    itemLines=new string[10][];
    

    那么这个错误就会消失

    你也会在这一行得到错误

    Console.WriteLine("Line " + i + "'s first value is: " + itemLines[i][0]);
    

    如果之前的语句没有数据来拆分 itemLines[i][0] 将是空的,要解决这个问题,请使用 if 语句检查特定节点上是否有元素

    if(itemLines[i]!=null && itemLines[i].Length>0)
    Console.WriteLine("Line " + i + "'s first value is: " + itemLines[i][0]); 
    

    【讨论】:

    • 这仍然会抛出一个空指针。 itemLines 仍然为空
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2011-03-17
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多