"应取消"的返回值

AZ.*_*AZ. 0 method-signature

我有一个方法DoCleanUp(),它将要求用户继续,然后清除当前工作区.如果用户选择取消此过程,它将返回.

我的问题是,哪个签名最好表示"取消"?

  1. bool DoCleanUp(); // return false to indicate canceled.

  2. bool DoCleanUp(); // return true to indicate this method should be canceled.

  3. void DoCleanUp(bool& cancel); // check parameter 'cancel' to see if this method was canceled.

更新:至于语言,它是C++\CLI或C#.

UPDATE2:现在假设我必须在DoCleanUp方法中保存文件.我将提示对话框询问用户是否保存/取消保存/取消文件.基于答案,这是我提出的:

void DoCleanUp();

DialogResult AskToSaveFile(); // return yes/no/cancel

void DoCleanUp( bool saveFile );

用法:

void DoCleanUp()
{
    DialogResult result =  AskToSaveFile();

    if( result == DialogResult::Cancel )    return; 

    bool saveFile = (result == DialogResult::Yes) ? true : false;
    DoCleanUp( saveFile );
}
Run Code Online (Sandbox Code Playgroud)

然后通过调用DoCleanUp(),您知道用户将有机会取消;
通过调用DoCleanUp(bool saveFile),您可以控制是否在不询问用户的情况下保存文件.
这看起来更好吗?

Shi*_*iji 5

这是一个经典的单一责任问题.

您不确定签名的原因是该方法正在做两件事.

我会创建2个方法:

bool CheckIfTheUserWantsToCancel()
void DoCleanUp()
Run Code Online (Sandbox Code Playgroud)

编辑

基于对问题的评论和编辑,我将创建第三种方法:

void SaveFile()
Run Code Online (Sandbox Code Playgroud)

然后DoCleanUp首先调用CheckIfTheUserWantsToCancel,如果没有取消则调用SaveFile.

恕我直言,这比试图记住带有参数false的DoCleanUp会在不询问用户的情况下保存文件要好得多,还是反过来呢?