확장 메서드를 클래스의 생성자에 인수로 전달하고 해당 클래스의 메서드에서 해당 확장을 확장으로 사용하려면 어떻게해야합니까?메서드 확장을 인수로 전달
예를 들어이는 IEnumerable을 확장 메서드가 들어있는 파일입니다
namespace System.Collections.Generic
{
public static partial class IEnumerableMethodExtensions
{
/// <summary>
/// Used by IsImageFile to determine if a file is a graphic type
/// we care about. (Not an Extension Method, just a helper method)
/// </summary>
public static string[] GraphicFileExtensions = new string[] { ".png", ".bmp", ".gif", ".jpg", ".jpeg" };
/// <summary>
/// Method Extension - specifies that FileInfo IEnumerable should only
/// return files whose extension matches one in GraphicFileExtensions[].
/// </summary>
/// <param name="files"></param>
/// <returns></returns>
public static IEnumerable<FileInfo> IsImageFile(this IEnumerable<FileInfo> files)
{
foreach (FileInfo file in files)
{
string ext = file.Extension.ToLower();
if (GraphicFileExtensions.Contains(ext))
yield return file;
}
}
}
을}
나는이 객체에 생성자에 인수로() IsImageFile을 통과 할 수 있도록하려면, 그래서 해당 클래스의 메서드는 메서드 확장으로 IsImageFile을 사용할 수 있습니다.
public class MainFileInfoSource
{
public MainFileInfoSource(List<DirectoryInfo> Directories,
ENUMERABLE_METHOD_EXTENSION_FILE_FILTER TheMethodExtension)
{
_myFilterMethodExtension = TheMethodExtension;
_directories = Directories;
initializeFileInfoList();
}
...
/// <summary>
/// Initializes the Files list.
/// </summary>
private void initializeFileInfoList()
{
...
for (int i = 0; i < _directories.Count; i++)
{
iEnumerableFileInfo = new[] { _directories[i] }.Traverse(dir =>
getDirectoryInfosWithoutThrowing(dir)).SelectMany(dir =>
getFileInfosWithoutThrowing(dir)._myFilterMethodExtension());
http://stackoverflow.com/questions/1016033/extension-methods-defined-on-value-types-cannot-be-used-to-create-delegates-wh – AlexanderBrevig
@AlexanderBrevig 당신이 나를 도울 수 그 질문/대답의 어떤 부분이 나의 테이크 아웃인지 이해하시오. 외관상으로는 나는 연결을보기에는 충분히 똑똑하지 않다. –
정적 메서드 호출이 컴파일 타임에 컴파일되므로이를 수행 할 수 없습니다. 실제 목표가 무엇인지 설명하면 잘 보이는 접근 방식을 찾는 데 도움이 될 수 있습니다 (구현 방법을 찾기 위해 서비스 로케이터 패턴을 사용하여 구현 된 확장 메소드 등). –