如何创建可以二进制搜索的"全局"不可变List <T>列表

Tra*_*uer 2 c# list readonly binary-search

问题:当我的节目明星我创建一个List<myClass> myList并用对象填充它.这些对象是使用文件中的日期创建的.之后,我不想更改该列表,也不想再次访问这些文件.但我需要在很多类/方法中访问该List

我提出的解决方案:List<myClass> myList在静态类中创建私有,并使用我的静态类的构造函数填充它,并仅使用返回myList.AsReadOnly()的属性访问它.这样我就无法改变实际的清单.但是AsReadOnly的回归是一个IList,对吧?我在MSDN上检查IList并且没有BinarySearch方法......这会使整个事情变得非常缓慢.

我该如何解决这个问题?复制IList返回正常列表,以便我可以排序和BinarySearch吗?或者可能更改整个"myList.AsReadOnly()"方法?我愿意接受各种建议和方法^^改变整个代码不是问题.

编辑:

  1. TL; DR如何创建一个"全局"列表,可以通过我的程序中的任何方法/类访问,可以使用List.Sort方法进行排序,可以二进制搜索并且不能更改它的内容(在创建之后,既不添加也不删除元素.
  2. 我一回到家就会发布一些代码.

akt*_*ton 7

如果您使用的是.Net的更高版本,而不是使用AsReadOnly(),请使用ImmutableList<T>.它一旦创建就无法修改,但具有BinarySearch()您正在寻找的方法.如果要细分列表或从多个线程访问列表,它也可能更有效.

  • @Trauer对ImmutableList <T>的所有修改方法都返回新列表.相比之下,传统的List <T>修改方法会修改列表. (2认同)