我有一个如此声明的程序:
procedure MyProc(List: Array of string);
我想知道如何检查List
参数是否为空。
例如:
procedure MyProc(List: Array of string);
begin
if List=[] then // here I want to check if the List array is empty
//do something
else
//do something else
end;
我怎么能这样做?
答案 0 :(得分:23)
您可以使用Length
功能
procedure MyProc(List: Array of string);
begin
if Length(List)=0 then // is empty ?
//do something
else
// do something else
end;
答案 1 :(得分:9)
空数组等于nil
:
if List = nil then // it's empty
(这也意味着SetLength(List, 0)
和List := nil
是等效的命令。)
空数组的最后一个索引小于第一个索引,对于示例中的 open array ,它意味着具有负的最后一个索引:
if High(List) < 0 then // it's empty
这意味着如果您想避免在空数组上运行循环,则不必执行任何特殊操作。只需像往常一样编写循环:
for i := Low(List) to High(List) do // won't run if List is empty
答案 2 :(得分:3)
我个人总是写
if Assigned(List) then
而不是
if List<>nil then
因为我认为它读得更好,而不仅仅是动态数组。
这回答了动态数组的问题,但您的示例是 open 数组,因此这里有两个可能的问题。
对于开放数组,我会使用Length()
或high()
根据数组的大小做出决定。我不会被Pointer(List)<>nil
比Length(List)<>nil
更快的论点所诱惑。这些选项之间的速度差异是不可辨别的,因此您应该使用最清晰和可读的选项。