2014-09-11 42 views
0

假设我有2周类似的方法命名的GetFiles()和PutFiles()瘦身多种类似方法的合适方法是什么?

public static void GetFiles(string source, string dest) 
    { 
     using (Session session = new Session()) 
     { 
      session.Open(sessionOptions); 

      TransferOptions transferOptions = new TransferOptions(); 
      transferOptions.TransferMode = TransferMode.Binary; 

      TransferOperationResult transferResult; 

      ////Different in here//// 
      transferResult = session.GetFiles(source, dest, false, transferOptions); 

      transferResult.Check(); 

      foreach (TransferEventArgs transfer in transferResult.Transfers) 
      { 
       Console.WriteLine("Transfer file from {0} to {1}", source, dest); 
      } 
     } 
    } 

    public static void PutFiles(string source, string dest) 
    { 
     using (Session session = new Session()) 
     { 
      session.Open(sessionOptions); 

      TransferOptions transferOptions = new TransferOptions(); 
      transferOptions.TransferMode = TransferMode.Binary; 

      TransferOperationResult transferResult; 

      ////Different in here//// 
      transferResult = session.PutFiles(source, dest, false, transferOptions); 

      transferResult.Check(); 

      foreach (TransferEventArgs transfer in transferResult.Transfers) 
      { 
       Console.WriteLine("Transfer file from {0} to {1}", source, dest); 
      } 
     } 
    } 

你可以看到他们是除了方法 我有考虑添加一个名为传输文件的新方法中调用不同的功能完全一样,其中接受一个参数来控制放文件的过程/获取文件

public static void TransferFile(string source, string dest, bool GetFile) 
    { 
     using (Session session = new Session()) 
     { 
      session.Open(sessionOptions); 

      TransferOptions transferOptions = new TransferOptions(); 
      transferOptions.TransferMode = TransferMode.Binary; 

      TransferOperationResult transferResult; 

      if(GetFile) 
      transferResult = session.GetFiles(source, dest, false, transferOptions); 
      else 
      transferResult = session.PutFiles(source, dest, false, transferOptions); 

      transferResult.Check(); 

      foreach (TransferEventArgs transfer in transferResult.Transfers) 
      { 
       Console.WriteLine("Transfer file from {0} to {1}", source, dest); 
      } 
     } 
    } 

但后来我发现,这不是一个最佳的解决方案,因为我不能处理超过2条件(获取文件&放文件)

+0

你是什么意思,它不能处理超过2个条件? – 2014-09-11 03:22:06

+0

如果我还有一个函数为 - transferResult = session.CompareFiles(source,dest,false,transferOptions); ,那么我将不得不将TransferFile(string source,string dest,bool GetFile)的参数更改为TransferFile(string source,string dest,int FileAction),这样我可以处理更多不同的过程 – 2014-09-11 03:23:37

+0

但我不认为这个解决方案是很好所有 – 2014-09-11 03:26:34

回答

0

您可以使用这样的,

public static void Get_Or_Put_Files(string source, string dest, bool isFilesAreGetting) 
{ 
    using (Session session = new Session()) 
    { 
     session.Open(sessionOptions); 

     TransferOptions transferOptions = new TransferOptions(); 
     transferOptions.TransferMode = TransferMode.Binary; 

     TransferOperationResult transferResult; 

     if(isFilesAreGetting) 
     { 
      transferResult = session.GetFiles(source, dest, false, transferOptions); 
     } 
     else 
     { 
      transferResult = session.PutFiles(source, dest, false, transferOptions); 
     } 

     transferResult.Check(); 

     foreach (TransferEventArgs transfer in transferResult.Transfers) 
     { 
      Console.WriteLine("Transfer file from {0} to {1}", source, dest); 
     } 
    } 
} 

只需添加一个额外的参数来讲述这个方法是否获得或将您的文件。

+0

谢谢,但这就是我所建议的,我想知道是否有更好的解决方案。 – 2014-09-11 06:15:05

+0

但我不这么认为,更好的解决方案是存在的比这个。 – 2014-09-11 09:20:57