2015-08-29 4 views
1

Мой код:Как IEnumerable <T> интерфейс имеет ToList() Метод

internal DbSet<TEntity> DbSet; 

public virtual IEnumerable<TEntity> Get() 
{ 
    IQueryable<TEntity> query = DbSet; 
    return query.ToList(); 
} 

Как вы можете видеть выше мы называем метод ToList(). Когда я перехожу в IQueryable, я видел, что он получает наследование от IEnumerable, но в IEnumerable я не вижу никакого метода ToList(). Откуда и откуда этот метод? Не могли бы вы мне помочь.

+1

Где вы ищете? https://msdn.microsoft.com/en-us/library/vstudio/bb342261(v=vs.100).aspx –

+0

http://referencesource.microsoft.com/#mscorlib/system/collections/generic/ienumerable. cs, 3acf01620172c7f0 –

ответ

4

Методы расширения, предусмотренные IQueryable<T> и IEnumerable<T>, как правило, соответственно найдены в типах Queryable и Enumerable.

Имейте в виду, что первые являются интерфейсами. Интерфейсы не могут быть реализованы. Это методы расширения (с реализацией), что означает, что они должны быть определены в static class как static.

+0

Спасибо, Jeroen. Люди, которые интересуются методами расширения этой ссылки, имеют полезную информацию: http://www.codeproject.com/Tips/709310/Extension-Method-In-Csharp –

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