对收到“无法对空引用异常执行运行时绑定”感到困惑

Puzzled with getting "Cannot perform runtime binding on a null reference exception"

提问人:user2217057 提问时间:2/28/2023 最后编辑:user2217057 更新时间:2/28/2023 访问量:27

问:

这似乎是一个简单的代码块,我相信我理解“无法对 null 引用异常执行运行时绑定”的含义,但我无法弄清楚为什么我会得到它。在到达抛出异常的这一行之前,我似乎正在检查所有内容:

for (int a = 0; a < (ItemList[i].Count - BufferSize); a++)

ItemList 是列表的动态列表(或二维列表)

List<dynamic> ItemList = new List<dynamic>();
int BufferSize = 35;

在此之后,一些代码填充了 ItemList 然后是有问题的块

for (var i = 0; i < ItemList.Count; i++)
{
    if (ItemList[i] != null)
    {
        if (ItemList[i].Count > BufferSize)
        {
            // this line throws exception
            for (int a = 0; a < (ItemList[i].Count - BufferSize); a++)
            {
                ItemList[i][a].Image = null;
            }
        }
    }
}
C# NullReferenceException

评论

0赞 user2217057 2/28/2023
标签已添加,感谢您的提醒

答:

0赞 jgauffin 2/28/2023 #1

在该代码中唯一可以为 null 的是第二个数组中的元素 'ItemList[i][a]'。

您可能希望减少嵌套,以使代码更易于阅读。

for (var i = 0; i < ItemList.Count; i++)
{
    if (ItemList[i] == null || ItemList[i].Count <= BufferSize)
    {
         continue;
    }

    for (int a = 0; a < (ItemList[i].Count - BufferSize); a++)
    {
         ItemList[i][a].Image = null;
    }
}

评论

0赞 user2217057 2/28/2023
是的,但异常似乎在到达 ItemList[i][a] 之前就被抛出