嗨,什么是最好的方式做嵌套的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方案之外,如果我发现自己需要嵌套,那么对我来说,这是一个很好的时间,认为重构到另一个方法调用。
EDIT将对象创建改为不引用应用程序,因为在此示例中它不是必需的。