是否可以返回一个只读的ObservableCollection,调用者可以';t修改

本文关键字:调用者 修改 ObservableCollection 只读 返回 是否 一个 | 更新日期: 2023-09-27 17:59:12

考虑以下代码:

public ObservableCollection<Message> Messages {
   get { return new ObservableCollection<Message>(); }
}

我能做些什么来防止调用方代码添加/删除/更改项目吗?

编辑:对不起,大家,我只是注意到这是一个骗局,但公认的答案是错误的。

是否可以返回一个只读的ObservableCollection,调用者可以';t修改

使用ReadOnlyObservableCollection 怎么样

代码为:

public ReadOnlyObservableCollection<Message> Messages 
{
  get { return new ReadOnlyObservableCollection<Message>(new ObservableCollection<Message>()); }
}

在阅读了ReadOnlyObservableCollection反模式之后,我意识到上述方法不是一个好方法,可能会导致细微的错误。建议的方法是:

public class MyClass
{
  public MyClass()
  {
    myCollection = new ObservableCollection<Message>();
    myReadOnlyCollection = new ReadOnlyObservableCollection<Message>(myCollection);
  }
  public ReadOnlyObservableCollection<Message> Messages 
  {
    get { return myReadOnlycollection; }
  }
  private readonly ObservableCollection<Message> myCollection;
  private readonly ReadOnlyObservableCollection<Message> myReadOnlyCollection;
}

为什么需要只读的ObservableCollection。如果这个集合是只读的,你不需要观察它。考虑集合<T>

返回ReadOnlyObservableCollection而不是

private ReadOnlyObservableCollection<Message> _Messages;
public ReadOnlyObservableCollection<Message> Messages {
   get { this._Messages = this._Messages ?? new ReadOnlyObservableCollection(new ObservableCollection<Message>()); return this._Messages; }
}

使用ReadOnlyObservableCollection<T>