反模式,重构C#代码示例

时间:2014-06-26 10:32:41

标签: c# refactoring anti-patterns

我编写了代码,但它看起来并不优雅和直观。我现在尝试重构它。你在我的代码中看到任何反模式吗?

我正在处理图片。我从文件夹中获取图像,处理它并在此之后删除。

 Console.WriteLine("Press ESC to exit");
 bool isEmptyFolderFlagSet = false;
 while (true)
 {
     if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)
     {
         appExited(null, EventArgs.Empty);
         return;
     }    
     List<string> images = new List<string>(System.Linq.Enumerable.Concat
         (System.IO.Directory.GetFiles(sourcePath, "*.pdf"), System.IO.Directory.GetFiles(sourcePath, "*.tif")));
     if (images.Count == 0 && !isEmptyFolderFlagSet)
     {
         Console.WriteLine("Waiting for image...");
         isEmptyFolderFlagSet = true;
     }
     else
     {
         isEmptyFolderFlagSet = false;
         foreach (string imagePath in images)
         {
             try
             {
                 processing.ProcessingFile(imagePath);
                 System.IO.File.Delete(imagePath);
             }
             catch (System.IO.FileNotFoundException ex)
             {
                 Console.WriteLine(ex.Message);
             }
         }
     }
     Thread.Sleep(500);
 }

1 个答案:

答案 0 :(得分:2)

  1. 在&#39;中放置一个条件。条款

    Console.WriteLine("Press ESC to exit");
    while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
    {      
       //Code here
    }     
    
  2. 如果有很多文件?你应该使用EnumerateFiles而不是GetFiles(会快得多)

  3. 代替昂贵的try..catch只捕获FileNotFound,您可以使用System.IO.File.Exits(filename)方法。

  4. 如前所述,具有回调功能的定时器(可能是匿名的)将更合适。