We seem to be getting all the information when the ID matches, but when there is no matching ID the program just crashes and gives us the following error.
Это имеет смысл. Учитывая ваш код, если для данного Employee
нет соответствия его Id
, вы возвращаете null
. Следовательно, если вы сделаете это:
var employee = SearchForEmployee(1);
// Attempting to access the Id propery on a null value will throw.
Console.WriteLine(employee.Id);
Тогда что будет через ЯРД, потому что возвращаемое значение было null
. Вам нужно добавить нулевой чек код:
var employee = SearchForEmployee(1);
if (employee != null)
Console.WriteLine(employee.Id);
Или, вы можете использовать C# -6 нулевой условный оператор:
var employee = SearchForEmployee(1);
Console.WriteLine(employee?.Id);
Примечание стороны - Ваш null
проверка внутри SearchForEmployee
является излишним, как вы return null
в любом случае, если нет совпадения. Это будет делать:
private Employee SearchForEmployee(int Id)
{
return (from emp in EmployeeArray
where emp.m_EmployeeId == Id
select emp).FirstOrDefault();
}
Или снова, используя C# -6:
private Employee SearchForEmployee(int Id) =>
EmployeeArray.FirstOrDefault(emp => emp.m_EmployeeId == Id);
Редактировать:
Из комментариев:
Looks like this: private Employee[] EmployeeArray = new Employee[50];
It is created when the windows form loads up, and it is only initialized when an employee is registered. We are using this method after atleast one employee was added.
Ну да, только инициализацией массив, но не ссылки, которые хранятся внутри этого массива. Это означает, что у вас может быть только один объект Employee
, но у вас есть еще 49, которые нет.
У вас есть два варианта, либо изменить ваш запрос, чтобы включить null
проверки:
private Employee SearchForEmployee(int Id)
{
return EmployeeArray.FirstOrDefault(emp => emp != null && emp.m_EmployeeId == Id);
}
Или вы могли бы использовать List<Employee>
вместо этого, что означает, что она будет содержать только сотрудник вы уже добавили, и он будет динамически изменять размер, поскольку вы добавляете к нему больше сотрудников, без дополнительной работы с вашего конца.
Возможно, потому что вы возвращаете 'null'? – Backs
Как вы используете возвращаемое значение из этого метода? –
С этим кодом нет ничего плохого (ничего, что могло бы вызвать исключение). Если что-то вызывает 'searchForEmployee' и пытается ссылаться на возвращаемое свойство null, вы получите это исключение. –