2

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

boardArray[xIn][yIn]

我期待有一个元素,我如何预先检查那里是否没有元素/对象?非常愚蠢的问题,我知道一个明显的答案。

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

4

4 回答 4

3
if(boardArray[xIn][yIn] == null)
//Skip it, do something, print it, whatever you gotta do
于 2013-04-20T15:58:29.200 回答
2

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

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

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如果可以从初始化代码中证明,假设不为空并跳过此检查可能是完全有效的。

于 2013-04-20T17:57:58.460 回答
0

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

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

// Your operations here 

}

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

于 2013-04-20T16:00:48.250 回答
0

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

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

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 的想法是为了表明有多种方法可以做你想做的事,具体取决于具体情况。

祝你好运,编码愉快

于 2013-04-22T00:49:13.890 回答