2009-11-19 117 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的一些技巧,并且它足够有效,可以快速帮助我快速成为这里的专家。 –