Я пытаюсь сделать свой код «если в модуле нет компонента, ничего не отображается». Я читаю значения из файла XML, который дает детали модуля (имя, кредиты, оценки и т. Д.), И я пишу эти значения с помощью команд запроса LINQ.Сравнение значений в XML с использованием C#
Все работает нормально, но я столкнулся с проблемой относительно требования, которое я хочу установить. В принципе, каждый модуль имеет различное количество оценок, некоторые из них имеют 2,3 или 4. Когда мне нужно отображать детали модуля, который имеет в общей сложности 4 оценки, код работает нормально, однако, когда есть либо 2, либо 3 оценки, которые я получаю NullReferenceException на этой линии:
var assessmentFour = from d in document.Descendants("moduleTitle")
where d.Value == (String)comboBoxTab4Mod1.SelectedItem
select d.Parent.Element("assessmentFour").Value; //exception thrown here
Я знаю, почему его бросили, потому что нет никакого значения assessmentFour для модуля я выбрал в моей COMBOBOX, и поэтому я попытался решить, используя следующие:
foreach (var item in assessmentFour)
{
if (assessmentFour != null)
{
labelTab4Mod1Cmpt4.Text = "";
}
else
{
labelTab4Mod1Cmpt4.Text = item.ToString();
}
}
но не работает. Я не знаю, как еще избежать исключения с нулевой ссылкой, если кто-то может указать мне на это, я был бы признателен.
Вот файл XML, если это необходимо, чтобы понять:
<?xml version="1.0" encoding="utf-8" ?>
<SoftwareEngineering>
<Module>
<moduleCode>ECSE401</moduleCode>
<moduleTitle>Programming Methodology</moduleTitle>
<credits>15</credits>
<assessmentOne>Coursework</assessmentOne>
<assessmentOneWeight>40</assessmentOneWeight>
<assessmentTwo>Coursework</assessmentTwo>
<assessmentTwoWeight>40</assessmentTwoWeight>
<assessmentThree>Test</assessmentThree>
<assessmentThreeWeight>20</assessmentThreeWeight>
</Module>
<Module>
<moduleCode>ECSC404</moduleCode>
<moduleTitle>Computer Systems Fundamentals</moduleTitle>
<credits>15</credits>
<assessmentOne>Test1</assessmentOne>
<assessmentOneWeight>30</assessmentOneWeight>
<assessmentTwo>Test2</assessmentTwo>
<assessmentTwoWeight>30</assessmentTwoWeight>
<assessmentThree>Test3</assessmentThree>
<assessmentThreeWeight>40</assessmentThreeWeight>
</Module>
<Module>
<moduleCode>EBSY401</moduleCode>
<moduleTitle>Information and Data Modelling</moduleTitle>
<credits>15</credits>
<assessmentOne>Test</assessmentOne>
<assessmentOneWeight>25</assessmentOneWeight>
<assessmentTwo>Coursework1</assessmentTwo>
<assessmentTwoWeight>10</assessmentTwoWeight>
<assessmentThree>Coursework2</assessmentThree>
<assessmentThreeWeight>35</assessmentThreeWeight>
<assessmentFour>Coursework3</assessmentFour>
<assessmentFourWeight>30</assessmentFourWeight>
</Module>
<Module>
<moduleCode>ECSC405</moduleCode>
<moduleTitle>Software Development Principles</moduleTitle>
<credits>15</credits>
<assessmentOne>Test1</assessmentOne>
<assessmentOneWeight>30</assessmentOneWeight>
<assessmentTwo>Coursework</assessmentTwo>
<assessmentTwoWeight>40</assessmentTwoWeight>
<assessmentThree>Test2</assessmentThree>
<assessmentThreeWeight>30</assessmentThreeWeight>
</Module>
<Module>
<moduleCode>ECSC407</moduleCode>
<moduleTitle>Web Technology</moduleTitle>
<credits>15</credits>
<assessmentOne>Tutorials</assessmentOne>
<assessmentOneWeight>20</assessmentOneWeight>
<assessmentTwo>Coursework</assessmentTwo>
<assessmentTwoWeight>20</assessmentTwoWeight>
<assessmentThree>Exam</assessmentThree>
<assessmentThreeWeight>60</assessmentThreeWeight>
</Module>
<Module>
<moduleCode>ECSC409</moduleCode>
<moduleTitle>Software Engineering Principles</moduleTitle>
<credits>15</credits>
<assessmentOne>Coursework1</assessmentOne>
<assessmentOneWeight>40</assessmentOneWeight>
<assessmentTwo>Coursework2</assessmentTwo>
<assessmentTwoWeight>30</assessmentTwoWeight>
<assessmentThree>Coursework3</assessmentThree>
<assessmentThreeWeight>30</assessmentThreeWeight>
</Module>
<Module>
<moduleCode>ECSC408</moduleCode>
<moduleTitle>Mathematics for Computing</moduleTitle>
<credits>15</credits>
<assessmentOne>Coursework</assessmentOne>
<assessmentOneWeight>50</assessmentOneWeight>
<assessmentTwo>Exam</assessmentTwo>
<assessmentTwoWeight>50</assessmentTwoWeight>
</Module>
<Module>
<moduleCode>EBSY400</moduleCode>
<moduleTitle>Communication and Learning Skills</moduleTitle>
<credits>15</credits>
<assessmentOne>Coursework</assessmentOne>
<assessmentOneWeight>30</assessmentOneWeight>
<assessmentTwo>Coursework</assessmentTwo>
<assessmentTwoWeight>70</assessmentTwoWeight>
</Module>
</SoftwareEngineering>
уведомления, как каждый модуль не имеет одинаковое количество оценок, поэтому я получаю сообщение об ошибке. Я знаю, что я мог бы добавить элемент valuFour для каждого модуля и сделать это таким образом, но это действительно дешево. Если бы кто-нибудь мог мне помочь, я мог бы это оценить. Спасибо
CheckNullElement не существует в текущем контексте. Вы что-то импортировали? – a7omiton
это определенная пользователем функция - код находится прямо в моем ответе. – Jason
О, я только что взял снипп сначала, все пошло немного. Спасибо, это работает, и это действительно эффективный способ сделать это. реквизит – a7omiton