Sunday, May 20, 2012

Маленькие хитрости класса Enumerable

Сегодня речь пойдет о классе System.Linq.Enumerable. Enumerable – это один из основных классов Linq, так как содержит extension-методы, используемые при построении запросов. Мало кому известно (по крайней мере, мне так показалось), но данный класс может быть использован не только для построения Linq-запросов. Enumerable содержит несколько обычных статических методов, которые, я думаю, тебе могут пригодиться.

Enumerable.Empty<T>

Насколько часто тебе приходится создавать пустую коллекцию (IEnumerable<T>)? Обычно разработчики либо создают пустой список, либо массив, состоящий из нуля элементов.

IEnumerable<int> items = new List<int>();
...
IEnumerable<int> items = new int[]()

С этим кодом все в порядке, он работает, но, согласись, смотрится не очень эстетично. Более того, данный подход не всегда является оптимальным, если ты хочешь создать пару тысяч подобных объектов. Тут тебе может помочь метод Enumerable.Empty<T>. Задача этого метода – вернуть тебе пустую коллекцию (IEnumerable<T>).

IEnumerable<int> items = Enumerable.Empty<int>();

Согласись, подобный код смотрится немного более эстетично. Кроме того он и работает быстрее в том случае, если тебе понадобится создать пустую коллекцию несколько (сотен тысяч) раз. Прирост производительности возможен за счет того, что метод Empty<T> возвращает один и тот же объект для каждого запрашиваемого типа (паттерн Singleton): первый вызов метода инициализирует объект, поэтому он заметно медленнее, чем создание пустого массива или списка, зато следующие вызовы теоретически выполняются быстрее. Стоит отметить, что метода Empty<T> создает массив из нуля элементов.

Enumerable.Range

int[] items = new int[count];
for (int i = 0; i < count; i++)
{
    items[i] = start + i;
}

Read more: Čivava's Blog
QR: Inline image 1

Posted via email from Jasper-Net