delphi – 最佳做法做嵌套TRY/FINALLY语句

嗨,什么是最好的方式做嵌套的try&最后在delphi语句中?

var cds1  : TClientDataSet;
    cds2  : TClientDataSet;
    cds3  : TClientDataSet;
    cds4  : TClientDataSet;
begin
  cds1      := TClientDataSet.Create(application );
  try
    cds2      := TClientDataSet.Create(application );
    try
      cds3      := TClientDataSet.Create(application );
      try
        cds4      := TClientDataSet.Create(application );
        try
        ///////////////////////////////////////////////////////////////////////
        ///      DO WHAT NEEDS TO BE DONE
        ///////////////////////////////////////////////////////////////////////
        finally
          cds4.free;
        end;

      finally
        cds3.free;
      end;
    finally
      cds2.free;
    end;
  finally
    cds1.free;
  end;
end;

你能建议一个更好的方法吗?

最佳答案
以下内容如下:

var cds1  : TClientDataSet;
    cds2  : TClientDataSet;
    cds3  : TClientDataSet;
    cds4  : TClientDataSet;
begin
  cds1      := Nil;
  cds2      := Nil;
  cds3      := Nil;
  cds4      := Nil;
  try
    cds1      := TClientDataSet.Create(nil);
    cds2      := TClientDataSet.Create(nil);
    cds3      := TClientDataSet.Create(nil);
    cds4      := TClientDataSet.Create(nil);
    ///////////////////////////////////////////////////////////////////////
    ///      DO WHAT NEEDS TO BE DONE
    ///////////////////////////////////////////////////////////////////////
  finally
    freeandnil(cds4);
    freeandnil(cds3);
    freeandnil(cds2);
    freeandnil(Cds1);
  end;
end;

这使它保持紧凑,并且只尝试释放所创建的实例。真的没有必要执行嵌套,因为任何失败将导致最终丢弃并执行所提供的示例中的所有清理。

就个人而言,我尽量不要在同一个方法中嵌套…除了try / try / except / finally方案之外,如果我发现自己需要嵌套,那么对我来说,这是一个很好的时间,认为重构到另一个方法调用。

编辑清理了一些感谢mghieutku的评论。

EDIT将对象创建改为不引用应用程序,因为在此示例中它不是必需的。

转载注明原文:delphi – 最佳做法做嵌套TRY/FINALLY语句 - 代码日志