Полностью квалифицированное название недвижимости

Я пытаюсь предотвратить System.NullReferenceException.

У меня есть компания, в которой есть коллекция сотрудников. У каждого сотрудника есть коллекция навыков.

SelectedEmployee указывает на текущий выбранный элемент в коллекции Employee.

SelectedSkill указывает на текущий выбранный элемент в коллекции умений.

У меня есть ListView, его ItemSource привязан к коллекции навыков; SelectedItem объекта ListView привязан к SelectedSkill.

Когда навык удален, я хочу, чтобы ListView прокрутил до последнего элемента.

private void DeleteSelectedSkillFromSelectedEmployee()
{
    Company.SelectedEmployee.Skills.Remove(Company.SelectedEmployee.SelectedSkill);
    EmployeeSkillsListView.ScrollIntoView(Company.SelectedEmployee.Skills.Last());
}

Если Сотрудник не был выбран, то SelectedEmployee будет нулевым. Это вызовет исключение System.NullReferenceException при выполнении каких-либо действий внутри метода.

ПРИМЕЧАНИЕ. Я использовал метод расширения для замены .Last (), чтобы он не выдавал ошибку в пустой коллекции.

Чтобы обойти это, я использую метод Util:

public static class Utils
{
    public static bool PropertyExists(Object obj, String name)
    {
        foreach (String part in name.Split('.'))
        {
            if (obj == null) { return false; }

            Type type = obj.GetType();
            System.Reflection.PropertyInfo info = type.GetProperty(part);

            if (info == null) { return false; }

            obj = info.GetValue(obj, null);
        }
        return obj != null;
    }
}

Итак, теперь это выглядит так:

private void DeleteSelectedSkillFromSelectedEmployee()
{
    if(Utils.PropertyExists(Company, "SelectedEmployee.SelectedSkill"))
    {
         Company.SelectedEmployee.Skills.Remove(Company.SelectedEmployee.SelectedSkill);
         EmployeeSkillsListView.ScrollIntoView(Company.SelectedEmployee.Skills.Last());
    }
}

Все выше работает отлично. Это не точный сценарий или код, поэтому не беспокойтесь о том, чтобы что-то исправить выше (просто предположите, что он работает нормально). Это просто вопрос ниже, я действительно заинтересован в выяснении.

(Представьте себе, что SelectedEmployee и SelectedSkill не равны нулю)

Есть ли способ получить полное имя собственности? Так что я мог бы сделать что-то вроде:

if(Utils.PropertyExists(Company, GetFullyQualifiedName(Company.SelectedEmployee.SelectedSkill)))

Где GetFullyQualifiedName (Object) возвращает «Company.SelectedEmployee.SelectedSkill».

Вторая часть вопроса: представьте, что SelectedEmployee имеет значение null: есть ли способ разрешить передачу NullReference методу? Я на 99,9% уверен, что ответ нет :)