2009-11-19 8 views
3

다른 하나의 단순한 생각이 있습니다. 필자는 CMS에서 파일의 최신 버전을 가져 오는 컨트롤을 파일 이름 (즉, 파일이있는 폴더와 관계없이)에 저장하는 메서드를 작성했습니다. 필자는 CMSToolbox 클래스에서 척을 잡아 둘 수있을만큼 유용하다는 것을 알았지 만,이 작업을 수행 할 때 더 이상 CMS (List를 반환하는)에서 제공하는 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 항상 어디에서 사용하는 동일한 방법에 대한 액세스를 허용 것이라고 생각.

나는 하하, 다시 틀렸다 :


편집 : IList

답변

12

당신은 System.Linq에 대한 사용 지침을 필요로 확장하는 CMSList 반환 Filemanager.GetGroupAll(). .Where()은 System.Linq 네임 스페이스에 정의되어있는 IEnumerable<T> (IList<T> 구현)의 확장 메서드입니다.

+0

당신은 전적으로 bl ** dy 전설입니다! 잘 했어! :) –

0

IIRC, 그 방법은 LINQ의 일부이며, IEumerable 인터페이스의 확장 메서드를 가져 오기 위해 클래스에 이러한 문을 사용하여 추가해야합니다.

3

Joel이 처음 이었지만 다음을 확장했습니다. Where()는 extension method입니다. 확장 방법은 실제 방법처럼 행동 정적 방법이며, 다음과 같이 선언됩니다

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

과 같이 호출 :

"hello".AnExtensionMethod(); 

그들은 필요에 아무것도 같은 문장을 사용하여 가져옵니다. 따라서 Java/C++과 달리 클래스는 메서드 외부에 선언 할 수 있습니다.

+1

훌륭한 설명, 감사합니다 Robert :). 이 곳을 사랑해, 너희들에게서 얼마나 많이 뽑혔는지 믿을 수가 없어. 다시 한번 감사드립니다. –

+0

좋은 성 :-) –

+0

@Iain 나는 "비밀"을 말할 것이다 : 내가 1 년 전에 SO를 사용하기 시작했을 때, 닷넷 3.5에서는 새로운 것에 관해 아무것도 알지 못했다. 그래서 VS2008의 새로운 기능과 VS2005의 몇 가지 트릭에 대해 배울 수있는 방법으로 사용했습니다. 곧 여기 전문가의 도움을받을 수 있도록 도움이되었습니다. –