gpt4 book ai didi

delphi - 执行嵌套 TRY/FINALLY 语句的最佳实践

转载 作者:行者123 更新时间:2023-12-03 14:34:32 25 4
gpt4 key购买 nike

嗨,在delphi中执行嵌套try和finally语句的最佳方法是什么?

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 场景除外。如果我发现自己需要嵌套,那么对我来说,这是考虑重构到另一个方法调用的好时机。

编辑由于 mghie 的评论而进行了一些清理和 utku .

编辑将对象创建更改为不引用应用程序,因为在本示例中没有必要。

关于delphi - 执行嵌套 TRY/FINALLY 语句的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/398137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com