我试图防止 System.NullReferenceException。
我有一个公司,它有一个雇员的集合。每个员工都有一组技能。
SelectedEmployee 指向 Employee 集合中当前选定的元素。
SelectedSkill 指向技能集合中当前选定的元素。
我有一个 ListView,它的 ItemSource 绑定到 Skills 集合;ListView 的 SelectedItem 绑定到 SelectedSkill。
删除技能时,我希望 ListView 滚动到最后一个元素。
private void DeleteSelectedSkillFromSelectedEmployee()
{
Company.SelectedEmployee.Skills.Remove(Company.SelectedEmployee.SelectedSkill);
EmployeeSkillsListView.ScrollIntoView(Company.SelectedEmployee.Skills.Last());
}
Run Code Online (Sandbox Code Playgroud)
如果尚未选择 Employee,则 SelectedEmployee 将为 null。在方法内部执行任何操作时,这将导致 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) …Run Code Online (Sandbox Code Playgroud)