2015-05-05 3 views
-1

В чем разница междуAsEnumerable() против "как IEnumerable <T>"

(db.Records as IEnumerable<Record>).Where(...) 

и

(db.Records.AsEnumerable()).Where(...). 

Is AsEnumerable() ярлык только для source as IEnumerable<T>?

Я читал https://msdn.microsoft.com/en-us/library/bb335435(v=vs.90).aspx, но не нашел никакой информации об этом.

+1

http://referencesource.microsoft.com/#System.Core/System/Linq/ Enumerable.cs, 3ee4ab000402fbeb –

ответ

5

Разница заключается в том, что вы можете вызвать AsEnumerable на IEnumerable<T> где T является анонимным типом, и вы не могли бы выполнить такой бросок на такой последовательности, так как вы не можете впечатать имя типа, который имеет без имени. Эта способность AsEnumerable, чтобы вывести общий аргумент, является причиной его существования.

(Это также возможно, чище синтаксис, но за пределами анонимных типов, которые не функциональное различие, просто личные предпочтения.)

0

В этой статье есть два соответствующих раздела.

Во-первых,

Метод AsEnumerable (IEnumerable) не имеет никакого эффекта, кроме как изменить тип во время компиляции источника от типа, который реализует IEnumerable к самому IEnumerable.

И второй,

Если удаленное выполнение не требуется, например, потому что предикат вызывает локальный метод, метод AsEnumerable можно использовать, чтобы скрыть собственные методы и вместо того, чтобы сделать стандартные операторы запросов доступный.

Другими словами, да, это похоже на ярлык. Однако он предназначен для обеспечения выполнения операций с памятью Where и других методов IEnumerable<T> в сравнении с фактическими реализациями базового типа.

+0

Есть небольшие отличия между 2. 'as' как операция литья, как описано [здесь] (https://msdn.microsoft.com/en-us/library/cscsdfbt.aspx), в то время как 'AsEnumerable()' возвращает объект как 'Enumerable ' методом. –

+0

@JohnOdom И как эти две вещи разные? Вы говорите, что есть разница, но не говорите *, что это *. – Servy

+0

@JohnOdom для эффектов, это то же самое с другим синтаксисом. Метод может быть реализован только с помощью 'return this как IEnumerable '. – rae1

Смежные вопросы