提前检查空数组元素

本文关键字:数组元素 检查 | 更新日期: 2023-09-27 18:10:04

如果我正在检查数组的内容,使用:

boardArray[xIn][yIn]

和我期望有一个元素,我如何检查如果没有元素/对象在那里提前?这真是一个愚蠢的问题,我知道答案很明显。

我正试图调试我的代码,这是期望的东西在这里。我想预先检查并报告程序正在运行,而不是让它崩溃。

提前检查空数组元素

if(boardArray[xIn][yIn] == null)
//Skip it, do something, print it, whatever you gotta do

首先,我想从一个你没有问过,但可能与你的问题相关的问题开始:

我建议使用多维数组,而不是锯齿数组。例如:

BoardSquare[,] boardArray = new BoardSquare[8, 8];

很可能你处理的是矩形板,所以你不需要锯齿数组。

我之所以告诉这个,是因为它使检查null更容易一些。使用锯齿数组,其中任何一个都可以是null:

  • boardArray
  • boardArray[xIn]
  • boardArray[xIn][yIn]

使用二维数组,只有两种可能:

  • boardArray
  • boardArray[xIn, yIn]

因此,检查变得简单了一些:

if (boardArray != null && boardArray[xIn, yIn] != null)
{
    // Do stuff
}

如果可以从初始化代码中证明,那么假设boardArray不为空并跳过此检查可能是完全有效的。

如果你不想用null做任何事情,

if(!(boardArray[xIn][yIn]==null)) {
// Your operations here 
}

你可以处理如何在else部分处理空值,它可以是可选的

除了可以接受的答案(这些答案是正确的)之外,您还需要检查任何级别的数组对象是否为空。

根据你如何检查和需要的信息,你可以这样做

if (boardArray != null && boardArray[xIn] != null && boardArray[xIn][yIn] != null){
    // all is good, do what must be done here
}

如果要循环它们,可以使用linq删除循环中的空项。它将是这样的东西(我没有IDE在我面前打开,所以语法可能有点偏离。原谅我。

foreach(var instance in boardArray[xIn].Where(x => x != null).Select(x => x).ToList()){
    // instance is the not nulled value.
}

我提出linq的想法是为了说明有多种方法可以完成你想做的事情,这取决于具体情况。

祝你编码顺利