这是
的继续我已经缩小了问题的范围,现在当我在调试模式下运行时,我可以看到由于某些原因并非所有Foreach
次迭代都已完成,我每次迭代都会进行调试,当程序停止时,我可以看到我在4个项目列表上进行迭代,但循环只执行3次,导致程序抛出NullrefrenceException
- 因为并非所有对象都已创建。 / p>
这是我的循环
foreach (var system in allSystems.ToList())
{
Debug.WriteLine("inside Foreach in system: " + system.Name + " interface " + system.Interfaces.Count + " structs " + system.Structs.Count);
if (nodes == null)
Debug.WriteLine("Node is Null");
try
{
Debug.WriteLine("Before add node");
lock (networkLocker)
{
Debug.WriteLine("trying to add: " + system.Name + " " + system.InputNum + " " + system.OutputNum + " " + system.Interfaces.Count + " " + system.Enums.Count + " " + system.Structs.Count);
nodes.Add(CreateNode(system.Name, new Point(width, height), false, system.InputNum, system.OutputNum, system.Interfaces, system.Enums, system.Structs, update));
}
Debug.WriteLine("Success adding new node to list");
}
catch (Exception ex)
{
logger.addMessage("Error in adding new node to list " + ex.Message + " Inner: " + ex.InnerException.Message);
Debug.WriteLine("Error in adding new node to list " + ex.Message + " Inner: " + ex.InnerException.Message);
}
width += 150;
if (width >= 700)
{
width = 0;
height += 100;
}
}
allSystems包含4个元素(我可以在调试时看到),但Debug.WriteLine("inside Foreach in system: " + system.Name + " interface " + system.Interfaces.Count + " structs " + system.Structs.Count);
仅打印3次,列表nodes
实际上只包含3个元素。
有什么想法?
因此,为了解释我在使用调试器添加了2张图片的情况:
这是我正在迭代的列表:
这是应该在每次迭代时添加节点的节点列表:
答案 0 :(得分:0)
我认为您的Debug.WriteLine("inside ...")
会引发异常,导致system.Interfaces
或system.Structs
为null
。
你应该进入VS Debug - Exception
并启用所有类型的异常以找到引发异常的异常。为了更容易一次启用或禁用所有异常,您应该查看Exception Breaker,他只是将此行为放在一个按钮中。