2013-08-11 3 views
2

У меня есть этот код:Как передать один метод в качестве параметра другому методу?

private void SearchForDoc() 
     { 
      try 
      { 
       outputtext = @"c:\temp\outputtxt"; 
       outputphotos = @"c:\temp\outputphotos"; 
       temptxt = @"c:\temp\txtfiles"; 
       tempphotos = @"c:\temp\photosfiles"; 
       if (!Directory.Exists(temptxt)) 
       { 
        Directory.CreateDirectory(temptxt); 
       } 
       if (!Directory.Exists(tempphotos)) 
       { 
        Directory.CreateDirectory(tempphotos); 
       } 
       if (!Directory.Exists(outputtext)) 
       { 
        Directory.CreateDirectory(outputtext); 
       } 
       if (!Directory.Exists(outputphotos)) 
       { 
        Directory.CreateDirectory(outputphotos); 
       } 
       t = Environment.GetEnvironmentVariable(Environment.GetFolderPath(Environment.SpecialFolder.Personal)); 

       ApplyAllFiles(t,ProcessFile(t); 
       for (int i = 0; i < textfiles.Length; i++) 
       { 


         FileInfo fi = new FileInfo((textfiles[i])); 
         DirectoryInfo d = new DirectoryInfo(temptxt); 
         long dirSize = DirSize(d); 

         if ((dirSize + fi.Length) <= 8388608) 
          fi.CopyTo(temptxt + "\\" + fi.Name, true); 
         else 
          break; 

       } 

Затем после этого у меня есть два метода:

static void ProcessFile(string path) {/* ... */} 
     static void ApplyAllFiles(string folder, Action<string> fileAction) 
     { 
      foreach (string file in Directory.GetFiles(folder)) 
      { 
       fileAction(file); 
      } 
      foreach (string subDir in Directory.GetDirectories(folder)) 
      { 
       try 
       { 
        ApplyAllFiles(subDir, fileAction); 
       } 
       catch 
       { 
        // swallow, log, whatever 
       } 
      } 
     } 

Используя эти два метода в моем методе должны получить все текстовые файлы из каталога документов и всех его подкаталогов ,

В моем методе я сделал:

ApplyAllFiles(t,ProcessFile(t); 

Но это неправильный путь, чтобы использовать его. Как я могу использовать методы?

ответ

1

Поскольку метод ProcessFile уже имеет ту же сигнатуру как Action<string>, вы можете просто указать имя методы:

ApplyAllFiles(t, ProcessFile); 
+0

PSWG КИ и теперь, как я можешь использовать мой цикл, так как переменные текстовые файлы не выходить больше : for (int i = 0; i DanielVest

+0

@ DanielVest Предполагается, что 'textfiles' должен быть списком всех файлов, обработанных в' ApplyAllFiles'? –

+0

p.s.w.g Я думаю ... textfiles - это строка [] должна содержать все файлы из ApplyAllFiles, но только текстовые файлы! – DanielVest

Смежные вопросы