2013-04-20 61 views
1

如果我使用的检查数组的内容:提前检查空数组元素

boardArray[xIn][yIn] 

,我希望那里是一个元素,我该如何检查,如果没有元件/物件有提前?真的很愚蠢的问题,我知道一个明显的答案。

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

+2

'if(boardArray [xIn] [yIn] == null){...}'? – Ryan 2013-04-20 15:56:48

+1

它可能为null,'boardArray','boardArray [xIn]'或boardArray [xIn] [yIn]'是什么?或者这些的组合? – 2013-04-20 16:05:47

回答

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

如果你不想做任何空值,

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

// Your operations here 

} 

您可以处理空值是如何在其他部分处理,也可能是可选的

1

首先,我D喜欢从你没有问过的东西开始,但是这可能与你的问题有关:

我建议使用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不为空,并跳过此检查,如果它可以从初始化代码被证明。

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的想法,显示有做你想做的,根据具体情况什么的多种方式。

祝你好运,快乐编码