3

我有另一个简单的(我认为)难倒我。我在我的一个控件中编写了一个方法,该方法在给定文件名的情况下获取 CMS 中文件的最新版本(即,无论文件位于哪个文件夹中)。我发现它足够有用,我想我会把它放在我的 CMSToolbox 类中,但是当我这样做时,我不能再使用Where()CMS 提供的 FileManager 类的方法(它返回一个列表)。

这是我的课程的简化示例:

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)
        {
        }
    }
}

当我在 Control 的上下文中执行完全相同的操作时(实际上是由 CMS 提供的扩展类Control),我可以访问该Where()方法,但在我的 ToolBox 类中我没有。是什么赋予了?我认为 anIList始终允许从您使用它的任何地方访问相同的方法。

我又错了,哈哈:)


编辑:Filemanager.GetGroupAll()返回一个CMSList扩展IList

4

3 回答 3

13

你需要一个 using 指令System.Linq。 是在 System.Linq 命名空间中定义的(实现).Where()扩展方法。IEnumerable<T>IList<T>

于 2009-11-19T03:34:28.557 回答
3

Joel 是第一个,但要对此进行扩展: Where() 是一种扩展方法。扩展方法是静态方法,其行为类似于真实方法,声明如下:

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

并称为:

"hello".AnExtensionMethod();

它们需要像其他任何东西一样使用语句来导入。因此,与 Java/C++ 不同,类可以在其外部声明方法。

于 2009-11-19T03:40:14.333 回答
0

IIRC,那个 .Where 方法是 LINQ 的一部分,你需要在你的类中添加那些 using 语句来获取 IEumerable 接口的扩展方法。

于 2009-11-19T03:37:02.327 回答