2012-10-16 92 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)會將您的代碼轉換爲靜態方法的調用。 因此,封裝的原理並不是真的被違反了 。實際上,擴展方法不能以它們正在擴展的類型訪問私有變量 。