Я смотрю на какой-то устаревший код. Класс использует ArrayList для хранения элементов. Элементы извлекаются из таблицы базы данных, и их может быть до 6 миллионов. Класс предоставляет метод ListCount для получения количества элементов в Arraylist.
Class Settings
{
ArrayList settingsList ;
public Settings()
{
settingsList = GetSettings();//Get the settings from the DB. Can also return null
}
public int ListCount
{
get
{
if (settingsList == null )
return 0;
else
return settingsList.Count;
}
}
}
ListCount
используется для проверки наличия элементов в списке. Мне интересно ввести в класс метод 'Any
'.
public bool Any(Func<vpSettings, bool> predicate)
{
return settingsList !=null && settingsList.Cast<vpSettings>().Any(predicate);
}
Вопрос в том, выполняет ли фреймворк какую-то оптимизацию и поддерживает ли количество элементов или выполняет итерацию по Arraylist для получения подсчета? Было бы целесообразно добавить метод «Любой», как указано выше.
Марк Гравел в следующем вопросе советует использовать Any для IEnumerable
GetSettings
? Например,IList
иIDictionary
происходят отICollection
. Это одно из преимуществ этого дополнительного уровня гибкости.Array
должен иметь меньше накладных расходов и быть быстрее. - person Greg   schedule 30.04.2014