0

我希望保存并加载一个包含 a 的类 (MeasConSettings)ObservableCollection<string>问题是列表在我的构造函数中初始化,所以当我执行以下操作时:

XmlSerializer serializer = new XmlSerializer(typeof(MeasConSettings));

使用项目 1 2 3 4 创建了一个列表。它可以很好地保存,但是在加载方面它出错了:

MeasConSettings loadedSettings = (MeasConSettings)serializer.Deserialize(stream);

它从初始化列表开始并添加加载的列表项而不是覆盖它们,因此结果是一个包含项目 1 2 3 4 1 2 3 4 的列表。

显然,解决方案是从构造函数中删除初始化,如本主题所示:Deserializing List with XmlSerializer Causing Extra Items但是如果文件不包含列表(例如保存文件的先前版本),如果我删除初始化并且保存的文件中没有列表,列表中将没有项目。这是不可接受的,因此:

有没有一种正确的方法可以在构造函数中加载带有初始化的可观察集合,而不会出现重复项?

或者

是否有正确的方法来检查保存的文件是否包含某些参数?

4

1 回答 1

1

如果我删除初始化并且保存的文件中没有列表,则列表中将没有项目。这是不可接受的

然后只需在初始化中处理这种特殊情况。

public void Init()
{
    if (this.List == null)
    {
        // Initialize the list
    }
}

从那里,您只需在Init每次创建MeasConSettings对象时调用该方法(通过调用构造函数或使用反序列化器)。

也就是说,我并不太喜欢初始化方法,因为它们缺乏可见性,并且开发人员可能会忘记调用它们。作为替代方案,您可以使用吸气剂:

private List<int> list;

public List<int> List
{
    get
    {
        if (this.list == null)
        {
            this.list = new List<int> { 1, 2, 3, 4 };
        }

        return this.list;
    }

    set
    {
        this.list = value;
    }
}

注意:此代码不是线程安全的。

于 2013-05-15T08:50:33.330 回答