测试空数组索引

Car*_*rlo 6 c# arrays

这是事情:

object[] arrayText = new object[1];

if (arrayText[1] == null)
{
    MessageBox.Show("Is null");
}
Run Code Online (Sandbox Code Playgroud)

我们知道这将是null,但它抛出一个异常,但我不想在try/catch块中处理它,因为它嵌套在循环中,try/catch会降低它的速度,它也不会看起来真的很棒:

object[] arrayText = new object[1];
try
{
    if (arrayText[1] == null)
    {

    }
}
catch (Exception ex)
{
    MessageBox.Show("Is null");
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的建议!

Luc*_*ero 23

null这不是问题,但索引无效.C#中的数组是基于0的,因此如果创建一个包含1个元素的数组,则只有索引0有效:

array[0] == null
Run Code Online (Sandbox Code Playgroud)

您可以通过在访问索引之前手动检查边界来避免这种情况:

if (index < array.Length) {
    // access array[index] here
} else {
    // no exception, this is the "invalid" case
}
Run Code Online (Sandbox Code Playgroud)


Gro*_*mer 11

object[] arrayText = new object[1];

if (arrayText[0] == null)
{
    MessageBox.Show("Is null");
}
Run Code Online (Sandbox Code Playgroud)

试试吗?数组基于0,因此尝试访问arrayText [1]会产生OutOfBoundsException.并且try/catch不会真正影响你的性能,那时堆栈中的数量并不多.