如何解决null check语句中的null引用异常

本文关键字:null 语句 引用 异常 check 解决 何解决 | 更新日期: 2023-09-27 18:24:43

我在布尔方法中添加了一个null属性检查,以防止在SelectedCustomer属性中有任何字符串字段为空时返回true。

问题是,在我向SelectedCustomer模型中输入任何数据之前,我的bool方法就从构造函数中被调用了。这会导致Null引用异常。

从我在语句上设置的断点可以看出,"{"对象引用未设置为对象的实例。"}"是错误。selectedCustomer属性直到我从数据网格中选择一个客户后才会初始化。

我的问题是,如何在不引起NRE的情况下以这种方式执行空检查?

这是CanModifyCustomer布尔方法,我在其中执行空检查:

private bool CanModifyCustomer(object obj)
{
    if (SelectedCustomer.FirstName != null && SelectedCustomer.LastName != null && SelectedCustomer != null)
    {
        return true;
    }
    return false;            
}

它在我的按钮命令中作为参数传递:

public MainViewModel(ICustomerDataService customerDataService) 
{
    this._customerDataService = customerDataService;
    QueryDataFromPersistence();
    UpdateCommand = new CustomCommand((c) => UpdateCustomerAsync(c).FireAndLogErrors(), CanModifyCustomer);
}

这是SelectedCustomer属性,对其执行空检查:

 private CustomerModel selectedCustomer;
    public CustomerModel SelectedCustomer
    {
        get
        {
            return selectedCustomer;
        }
        set
        {
            selectedCustomer = value;
            RaisePropertyChanged("SelectedCustomer");
        }
    }

如何解决null check语句中的null引用异常

只需使用null条件运算符。(C#6)

if (SelectedCustomer?.FirstName != null && SelectedCustomer.LastName != null)
{
    return true;
}

或者你应该把SelectedCustomer != null放在第一位。因为条件是从左到右评估的。因此,如果第一个条件由于使用&&运算符而为假,则它将不会继续检查其他部分,并且该条件变为假。

if (SelectedCustomer != null && SelectedCustomer.FirstName != null && SelectedCustomer.LastName != null)
{
    return true;
}