c# - 将int放入各种对象数组时得到 'NullReferenceException'

标签 c# arrays oop

作为一项学校作业,我正在尝试使用 C# 在 WinForms 中创建一个数独游戏。数独中的所有内容都必须是面向对象的,所以我没有选择像这样构建代码,老师选择了。

当我在 SudokuGUI 的文本框中放入一个数字 (int) 时,它试图将数字放入数组中但失败了,并给出了众所周知的错误:

An unhandled exception of type 'System.NullReferenceException' occurred in WindowsFormsApplication5.exe Additional information: Object reference not set to an instance of an object.

代码如下所示:

  1. 首先,当从 TextBox 释放键时,我们将数字发送到将数字放入数组的方法

    private void Valuechange_KeyUp(object sender, KeyEventArgs e)
    {
    
        TextBox text_box = sender as TextBox;
    
        var position = tableLayoutPanel1.GetPositionFromControl(text_box);
    
        int x = position.Row;
        int y = position.Column;
    
        if (int.TryParse(text_box.Text, out value) && int.Parse(text_box.Text) < 10 && int.Parse(text_box.Text) > 0 || value == 0)
        {
            add_value.Array_AddNumber(x, y, value);
        }
        else
        {
            MessageBox.Show("Skriv in en siffra mellan 1-9");
            text_box.Clear();
        }
    
    }
    
  2. 这是将文本框中的数字添加到保存数字的数组的方法

    class Ruta
    {
        Siffra number = new Siffra();
    
        public Siffra[,] SudokuArray = new Siffra[9, 9];
    
    
    
        public void Array_AddNumber(int x, int y, int value)
        {
            SudokuArray[x, y].nummer = value;
        }
    }
    
  3. 这里是“Siffra”,在瑞典语中是数字的意思,这是数组的类型

    class Siffra
    {
       private int _nummer;
    
       public int nummer
       {
          get { return _nummer; }
          set { _nummer = value; }
       }
    }
    

我做错了什么,我真的不明白,我的老师也帮不了我:/

这是完整的解决方案: https://dl.dropboxusercontent.com/u/13409794/WindowsFormsApplication5.zip

最佳答案

问题是对这一行的误解:

public Siffra[,] SudokuArray = new Siffra[9,9];

该行在内存中创建了一个新的二维数组对象,空间为 9 项 x 9 项(总共 81 项)。误解是数组中每个点的内容仍然是null。因此,稍后在您的代码中,当您执行此操作时:

SudokuArray[x,y].nummer = value;

代码首先查找数组引用并使用它来查找位置 (x,y) 处的元素。该值仍然是 null。然后,代码会使用 null 引用的 nummer 属性。哎呀。你不能那样做。

要修复它,您需要将此代码添加到您的 Ruta 类的构造函数中:

for (int x = 0; x < 9; x++)
  for (int y = 0; y < 9; y++)
     SudokuArray[x,y] = new Siffra();

关于c# - 将int放入各种对象数组时得到 'NullReferenceException',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21054432/

相关文章:

c# - 如何使用ajax将枚举值传递给 Controller ​​?

c# - 按名称找不到 DataTable 中的 DataColumn

javascript - 如何循环遍历具有多个对象的数组并仅在 Javascript 中列出某些元素?

c - 多维数组的超出范围声明

c# - 将字符串拆分为 2 个数组的有效方法是什么

c# - 字符串与字节数组,性能

java - ArrayList<X> 是聚合还是组合?

c# - 分配类型 .net

c# - 如何在逐字字符串中包含逐字字符串?

c++ - C++中的接口(interface)设计和继承