2012-10-16 64 views
2

ReSharper的可查询建议我做如下修改:使用的,而不是扩展方法

来源:

foreach (var item in db.Proposta.GroupBy(x => x.StatusProposta.Nome)) 
{ 
    ... 
} 

要:

foreach (var item in Queryable.GroupBy(db.Proposta, x => x.StatusProposta.Nome)) 
{ 
    ... 
} 

的消息是:Invoke方法“的GroupBy '作为静态方法

我正在使用实体框架db是我的上下文。

我想知道我可以得到什么好处,或者我可以避免这样的改变。

+1

您是否使用旧版本的ReSharper,它不理解扩展方法? –

+0

这些调用是等同的。我会离开原来的一个。另一个人感到尴尬,因为GroupBy已经是一种扩展方法 - 并且创建了扩展方法,通过允许将方法添加到此类型来扩展类型。换句话说 - 扩展方法的想法是使用新添加的方法,就像该类型中已经存在的其他方法一样。 – Pawel

+0

@TrevorPilley我使用的是7.0版本。刚刚安装它。 – Androiderson

回答

2

Resharper只是提供它可以为你做的事情。它同样会提供将静态方法调用转换为扩展方法调用。

真的这是一个偏好问题 - 相对于其他方面没有优势 - 它们编译为相同的东西,但您应该使用作为扩展方法。在使用LINQ时,使用扩展方法的扩展方法语法而不是纯静态调用的做法普遍受到欢迎。

+0

这样做,谢谢! – Androiderson

0

Extension Methods (C# Programming Guide)

在你的代码调用与实例方法 语法的扩展方法。但是, 编译器生成的中间语言(IL)会将您的代码转换为静态方法的调用。 因此,封装的原理并不是真的被违反了 。实际上,扩展方法不能以它们正在扩展的类型访问私有变量 。