解释“To静态方法调用”ReSharper建议

时间:2015-10-04 18:19:35

标签: c# asp.net-mvc resharper

有人可以帮我理解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))

(想法是返回与id列表匹配的程序,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();

我特别想知道这样做的好处。我正在尝试尽可能减少内存分配

2 个答案:

答案 0 :(得分:1)

Queryable.Where是一种扩展方法。它被定义为

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

您可以将其称为常规静态方法,将IQueryable作为参数传递,或作为扩展方法传递。编译器将生成完全相同的代码。

扩展方法语法比静态方法语法更具可读性。

答案 1 :(得分:1)

案件之间没有区别。这实际上是封面下的扩展方法所发生的情况。这是个人偏好的问题,虽然直接调用不太常用。