【发布时间】:2019-04-13 03:19:41
【问题描述】:
我知道,这个问题似乎被问了很多,但我仍然无法使用人们提供的解决方案来解决它。因此,在尝试使用二维对象数组时,我也遇到了异常“System.NullReferenceException:'对象引用未设置为对象的实例。'”。所以这是不工作的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Console_multi_fonctionnelle_basique
{
partial class Program
{
public class SudokuSolver
{
//Initialisation code
public SudokuSolver()
{
GridValue[,] SudokuGrid = new GridValue[9, 9];
SudokuDisplay(SudokuGrid);
Console.ReadKey();
}
//Store values for every slot
class GridValue
{
public bool CanBe1 { get; set; } = false;
public bool CanBe2 { get; set; } = false;
public bool CanBe3 { get; set; } = false;
public bool CanBe4 { get; set; } = false;
public bool CanBe5 { get; set; } = false;
public bool CanBe6 { get; set; } = false;
public bool CanBe7 { get; set; } = false;
public bool CanBe8 { get; set; } = false;
public bool CanBe9 { get; set; } = false;
public bool AlreadySolved { get; set; } = false;
public int Value { get; set; } = 0;
}
//Display the grid
void SudokuDisplay(GridValue[,] Sudoku)
{
Sudoku[1, 1].Value = 1;
Sudoku[1, 2].Value = 2;
Console.WriteLine(Sudoku[0, 0].Value + Sudoku[1,0].Value);
}
//To Do
//Ask the values for every slot
//Verify if the slot can contain a number
//Choose the most appropriated number for the slot
//End the program after user pressing an key
}
}
}
所以,如您所见,我想使用大小为 9x9 的“GridValue”类的 2D 数组,以便每个“Grid slot”都有自己的变量,以便以后解决数独问题。但是程序看起来不理解我的数组包含“GridValue”对象所以他似乎不理解每个数组值都包含多个变量......所以我想要的结果是我可以为其中一个对象定义变量数组没有异常。
【问题讨论】:
-
请添加外部代码,必须删除构造函数的 ll 2-3 并移至外部代码
-
明白(不像
int和string等内在类型),类实例需要用new关键字初始化。GridValue[,] SudokuGrid = new GridValue[9, 9];将简单地为您分配一个二维数组,其所有元素都将未初始化。您需要为网格的每个元素执行SudokuGrid[0, 0] = new GridValue()之类的操作。 -
数组在 c# 中基于零。第一个元素是 Sudoku[0,0] 而不是 Sudoku[1,1]。您没有设置 [0,0],因此它仍然为空,但您在写入值时尝试访问它。
-
为了进一步阐明 dotNET 的答案:对于未初始化的值,使用默认值。 int 的默认值为 0,字符串的默认值为 null,任何类的默认值也是 null。=> 当您尝试访问
Sudoku[0,0].Value处的未初始化值时,该值具有类的默认值null,它返回一个 NullReferenceException。 -
GridValue[,] SudokuGrid = new GridValue[9, 9];初始化数组但不初始化数组的元素。因此,当您尝试访问数组的元素时,您会得到 null。您需要先初始化数组的元素,然后才能设置它们的属性。
标签: c# arrays class object multidimensional-array