If Assigned(Foo)
和If (Foo <> nil)
之间有什么区别吗?如果是,那么它们何时应该被使用?
答案 0 :(得分:36)
几乎是一回事。 The official documentation个州
已分配(P)对应于测试 P&LT;&GT; nil表示指针变量,@ P &LT;&GT;没有程序变量。
因此,如果P
是普通指针,那么P <> nil
和Assigned(P)
完全等同于。另一方面,如果P
是某个程序,那么
var
p: TNotifyEvent = nil;
procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(p) then
p(Self);
end;
将起作用,
procedure TForm1.FormCreate(Sender: TObject);
begin
if @p <> nil then
p(Self);
end;
但
procedure TForm1.FormCreate(Sender: TObject);
begin
if p <> nil then
p(Self);
end;
甚至不会编译。因此,结论是P <> nil
和Assigned(P)
完全等效于每次都有效!
答案 1 :(得分:1)
Assigned()可以将任何对象作为参数处理,并且始终是您要调用的对象。 如果您得到一个空值,那么您肯定想将其测试为“未分配”,而不是因为空值<> nil而出现异常。