3

私は困惑している別の単純なものを持っています(私は思う)。私は自分のコントロールの 1 つに、ファイル名を指定して 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 クラスではアクセスできません。何を与える?IListを使用すると、どこからでも同じメソッドにアクセスできるようになると考えました。

私はまた間違っています、ハハ:)


編集:拡張Filemanager.GetGroupAll()するaを返しますCMSListIList

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 に答える