2015-10-04 2 views
2

Может кто-то помочь мне понять ReSharper предложение изменить:Explaination для "Для статического вызова метода" ReSharper предложение

var progs = ctx.Programs.Where(i => progIds.Contains(i.ID) && i.Projects.Any()) 

к этому:

var progs = Queryable.Where 
     (ctx.Programs, i => progIds.Contains(i.ID) && Enumerable.Any<Project>(i.Projects)) 

(Идея вернуть программы, соответствуют списку идентификаторов, progIds и содержат проекты, навигационные объекты)

Или это:

GridView gv = new GridView(); 
gv.DataSource = ctx.Programs.Where(i => progIds.Contains(i.ID)).ToList(); 

к этому:

GridView gv = new GridView(); 
gv.DataSource = Queryable.Where(ctx.Programs, i => progIds.Contains(i.ID)).ToList(); 

Я специально интересно о преимуществах этого. В настоящее время я пытаюсь уменьшить выделение памяти

+0

нет разница между те. вот как выглядят методы расширения. –

+0

Таким образом, нет никакой пользы от использования одного над другим - только личное предпочтение? – LoJo

+0

правильный. менее часто используется прямой вызов. –

ответ

1

Нет разницы между случаями. На самом деле это происходит с методом расширения под обложками. Это вопрос личных предпочтений, хотя прямой вызов используется менее часто.

1

Queryable.Where - метод расширения. Она определяется как

public static IQueryable<TSource> Where<TSource> 
      (this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate) 

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

Синтаксис метода расширения более читабельен, чем синтаксис статического метода.

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