C# 什么是合适的方法来瘦身多重相似的方法?

C# 什么是合适的方法来瘦身多重相似的方法?,c#,structure,C#,Structure,假设我有两个类似的方法,名为GetFiles和PutFiles public static void GetFiles(string source, string dest) { using (Session session = new Session()) { session.Open(sessionOptions); TransferOptions transferOptions = new T

假设我有两个类似的方法,名为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);
            }
        }
    }
您可以看到它们完全相同,只是在方法中调用了不同的函数 我考虑添加一个新的方法,名为TrimeFrfile,它接受一个更多的参数来控制PATH文件/GET文件

的进程。
    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个条件get file&put file

您可以这样使用

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);
        }
    }
}

只需添加一个额外参数,即可判断此方法是否正在获取或放置您的文件。

它不能处理两个以上的条件是什么意思?如果我还有一个函数-transferResult=session.CompareFileSource、dest、false、transferOptions,然后我必须将TransferFilestring source、string dest、bool GetFile的参数更改为TransferFilestring source、string dest、int FileAction,这样我就可以处理更多不同的进程,但我认为这个解决方案根本不好,我的意思是,我认为这是一个非常好的解决方案。您已经确定了重复功能,并将其分解为单个方法,从而强制执行“请勿重复自己”原则。谢谢,但这正是我提出的,我想知道是否有更好的解决方案。但我不认为存在更好的解决方案,正是这一点。