Использование Nunit для проверки кода C # с помощью следующего блока кода:
foreach (XmlNode node in nodeList)
{
thisReport.Id = node.Attributes.GetNamedItem("id").Value;
thisReport.Name = node.Attributes.GetNamedItem("name").Value;
thisReport.Desc = node.Attributes.GetNamedItem("desc").Value;
if (node.SelectNodes("subreport").Count > 0)
{
thisReport.HasSubReport = true;
subReportNodeList = node.SelectNodes("subreport");
foreach(XmlNode subNode in subReportNodeList)
{
mySubReport.ParentID = node.Attributes.GetNamedItem("id").Value;
mySubReport.Priority = subNode.Attributes.GetNamedItem("priority").Value;
mySubReport.SubReportId = subNode.Attributes.GetNamedItem("id").Value;
mySubReport.SubReportName = subNode.Attributes.GetNamedItem("name").Value;
string sTime = subNode.Attributes.GetNamedItem("time").Value;
mySubReport.Time = Convert.ToInt16(sTime);
thisReport.SubReportsList.Add(mySubReport);
}
}
else
{
thisReport.HasSubReport = false;
}
reports.Add(thisReport);
}
Код завершается с нулевой ссылкой на объект в строке:
thisReport.SubreportsList.Add(mySubReport)
Но, глядя на местных жителей, thisReport
существует и имеет значения, назначенные в верхней части блока, а mySubReport
существует и имеет значения, назначенные непосредственно над строкой, в которую он добавлен в thisReport. Все значения в mySubReport
действительны, а SubReportsList
в thisReport
является общим списком типа SubReport
.
Так, где нуль? Это кажется таким простым, это должно быть что-то действительно очевидное, чего я не вижу.