Как определить, материализовано ли перечисление LINQ? - PullRequest
1 голос
/ 18 мая 2010

Есть ли какой-нибудь способ определить, материализован ли перечислимый объект, построенный с использованием LINQ (в данном случае для объектов), или нет? Кроме попытки проверить тип базовой коллекции?

В частности, поскольку enumerable.ToArray() создаст новый массив, даже если базовая коллекция уже является массивом, я ищу способ избежать вызова ToArray() дважды в одной коллекции.

Ответы [ 2 ]

1 голос
/ 18 мая 2010

Перечисляемое значение не будет иметь «базовую коллекцию», оно будет быть коллекцией. Попробуйте привести его к одному и использовать полученную ссылку:

var coll = enumerable as ICollection<T>;
if (coll != null) {
    // We have a collection!
}
0 голосов
/ 18 мая 2010

Проверка "is IEnumerable" может сделать это, другого пути нет. Однако вы не можете использовать объявление «var» для возвращаемого типа, потому что оно «скрывает» от вас тип. Если вы объявите явный IEnumerable, то компилятор сообщит вам, возвращается ли это.

...