从属性读取意外的StackOverflowException

时间:2019-02-21 12:15:58

标签: c#

我在通用代码中发现了错误,但是我不知道在哪里出错。看来我的大脑也有堆栈溢出:-)。 这是堆栈溢出来自的代码:

public ObservableCollection<TestStep> TestSteps
{
    get { return TestSteps; }
    set { TestSteps = value; }
} 

2 个答案:

答案 0 :(得分:4)

该属性需要一个后备字段

private ObservableCollection<TestStep> testSteps;
public ObservableCollection<TestStep> TestSteps
{
    get { return testSteps; }
    set { testSteps = value; }
}

或者您使用自动实现的属性:

public ObservableCollection<TestStep> TestSteps { get; set; }

由于通常只创建一次ObservableCollections,以后仅添加或删除项,因此该属性应为只读并初始化:

public ObservableCollection<TestStep> TestSteps { get; }
    = new ObservableCollection<TestStep>();

如果确实需要设置它,并且由于它似乎是视图模型中的属性,则应在其设置器中触发属性更改通知,例如INotifyPropertyChanged接口的PropertyChanged事件:

private ObservableCollection<TestStep> testSteps;
public ObservableCollection<TestStep> TestSteps
{
    get { return testSteps; }
    set
    {
        testSteps = value;
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(TestSteps)));
    }
}

答案 1 :(得分:-1)

该属性的getter和setter都以递归方式调用自己。