C#返回不可修改的列表

Ais*_*war 4 .net c# properties modifier readonly

我有一个类,其中包含一个List<Item>我在类上有一个getter来返回它.我可以做些什么来确保调用的用户无法修改返回的List吗?(因为它是引用类型 - 我相信对返回引用的更改会影响存储在源对象中的列表)

Ste*_*end 9

返回包含的列表ReadOnlyCollection<T>.

  public ReadOnlyCollection<Item> MyROList {
    get { return new ReadOnlyCollection<Item>(myList); }
  }

  private List<Item> myList = new List<Item>();
Run Code Online (Sandbox Code Playgroud)

关于SO的更多细节.

根据您的类的用法,您可以分配ReadOnlyCollection构造时间并将其链接到底层List.如果您希望总是或大部分时间都需要此属性,并且当时基础List已到位,那么这是明智的.否则,您可以离开ReadOnlyCollection<Item>类成员null并在getter中按需分配它null(如果考虑到线程安全性).