提前检查空数组元素
本文关键字:数组元素 检查 | 更新日期: 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的想法是为了说明有多种方法可以完成你想做的事情,这取决于具体情况。
祝你编码顺利