提前检查空数组元素

时间:2013-04-20 15:55:55

标签: c# arrays null

如果我使用以下方法检查数组的内容:

boardArray[xIn][yIn]

我期待有一个元素,如何提前检查是否没有元素/对象?我知道一个明显的答案真是愚蠢的问题。

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

我建议使用multidimensional数组,而不是jagged array。例如:

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

您很可能正在处理矩形板,因此您不需要jagged arrays

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

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

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

  • boardArray
  • boardArray[xIn, yIn]

因此,检查变得容易一些:

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

如果可以从初始化代码中证明boardArray不为空并且跳过此检查,则完全有效。

答案 2 :(得分:0)

如果你不想对空值做任何事情,

if(!(boardArray[xIn][yIn]==null)) {

// Your operations here 

}

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

答案 3 :(得分:0)

除了接受的答案(正确)之外,您还要检查可能为null的任何数组对象级别的空值。

取决于您如何进行检查并需要信息,您可以这样做

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的想法,表明有多种方法可以根据具体情况做你想做的事。

祝你好运,编码愉快