问题:当我的节目明星时,我创建了一个List<myClass> myList
并用对象填充它。这些对象是使用文件中的日期创建的。之后,我不想更改该列表,也不想再次访问这些文件。但我需要在很多类/方法中访问该List
我提出的解决方案:在静态类中创建List<myClass> myList
作为私有,并使用我的静态类的构造函数填充它,并仅使用返回myList.AsReadOnly()的属性访问它。这样我就无法改变实际的清单。但是AsReadOnly的回归是一个IList,对吧?我正在检查MSDN上的IList,并且没有BinarySearch方法......这将使整个事情变得非常缓慢。
我该如何解决这个问题?复制IList返回正常列表,以便我可以对它进行排序和二进制搜索吗?或者可能更改整个“myList.AsReadOnly()”方法?我愿意接受各种建议和方法^^改变整个代码不是问题。
编辑:
答案 0 :(得分:7)
如果您使用的是.Net的更高版本,而不是使用AsReadOnly(),请使用ImmutableList<T>
。它一旦创建就无法修改,但具有您正在寻找的BinarySearch()
方法。如果您想要细分列表或从多个线程访问它,它也可能更有效。
答案 1 :(得分:2)
在这种情况下,取决于个人喜好。这是我的,作为一个例子:
private List<string> _MyList = new List<string>();
private void InitializeList()
{
//code here to fill list.
//Keep in mind, that binary search works on sorted lists.
_MyList.Sort(/* Place your object comparer here. */);
}
//Make a copy in an array.
public string[] MyListAsArray
{
get { return _MyList.ToArray(); }
}
public int GetBinarySearchIndex(string value)
{
return Array.BinarySearch(MyListAsArray, value/*, Place your object comparer here. */);
}