2009-11-19 50 views
3

我有另一個簡單的(我認爲)這是困擾着我。我已經在我的一個控件中編寫了一個方法,該方法在CMS中給出文件的最新版本(即文件的文件夾位置)。我發現它非常有用,因爲我認爲我將它放在我的CMSToolbox類中,但是當我這樣做時,我不能再使用CMS提供的FileManager類的Where()方法(它將返回一個列表)。C#初學者:我的IList.Where()方法在哪裏去了?

這是我班的一個簡單的例子:

using System; 
using System.Collections.Generic; 
using CMS.CMS; 
using CMS.Core; 
using CMS.Web; 

namespace CoA.CMS { 
    public class ToolBox 
    { 
     public CMS.CMS.File getLatestFileVersionByFilename(string filename, int GroupID) 
     { 
      IList<CMS.CMS.File> fileWithName = FileManager.GetGroupAll(false, GroupID).Where(file => currentFileVersionIsNamed(file, filename)).ToList<CMS.CMS.File>(); 
      return getLatestFileFromListOfFiles(fileWithName); 

     } 
     protected bool currentFileVersionIsNamed(CMS.CMS.File file, string name) 
     { 
     } 
     protected CMS.CMS.File getLatestFileFromListOfFiles(CMS.CMS.File file) 
     { 
     } 
    } 
} 

當我做同樣的事情在控制我有機會獲得Where()(真由延伸Control的CMS提供的一類)的情況下方法,但在我的ToolBox類中,我沒有。是什麼賦予了?我認爲IList總是允許從任何地方訪問相同的方法。

我是錯了,哈哈:)


編輯:Filemanager.GetGroupAll()返回CMSList延伸IList

回答

12

你需要一個using指令System.Linq.Where()是在System.Linq命名空間中定義的IEnumerable<T>(其中IList<T>實現)的擴展方法。

+0

你,先生,是絕對的bl ** dy傳奇!做得好! :) –

0

IIRC,那裏。方法是LINQ的一部分,並且您需要添加那些在您的類中使用語句來獲取IEumerable接口的擴展方法。

3

喬爾是第一個,但擴大說明:其中()是一個extension method。擴展方法是像真正的方法靜態方法,並聲明如下:

static class NameNeverUsed 
{ 
    public static void AnExtensionMethod(this string x) 
    { 
    } 
} 

而且叫這樣的:

"hello".AnExtensionMethod(); 

他們需要通過使用象別的語句進口。因此,與Java/C++不同,一個類可以在其外部聲明方法。

+1

優秀的解釋,謝謝羅伯特:)。喜歡這個地方,我無法相信我從你們那裏得到了多少。再次感謝。 –

+0

好的姓氏:-) –

+0

@Iain我會告訴你一個「祕密」:當我大約一年前開始使用SO時,我對.NET 3.5中的新東西一無所知。我使用SO作爲一種方法來幫助自己瞭解VS2008中的新功能,甚至是VS2005的一些技巧,並且它足夠有效,可以快速幫助我快速成爲這裏的專家。 –