如何判断一个TStringList的变量是否已经创建?(100分)

  • 主题发起人 主题发起人 foolaliu
  • 开始时间 开始时间
F

foolaliu

Unregistered / Unconfirmed
GUEST, unregistred user!
如题。<br>我用Assigned函数不起作用,有高手知道吗?
 
if TStringList=nil then showmessage('is null');
 
不对,没起作用
 
if 变量名 is TStringList then
 
if Assign(List) then List:=TstringList.create;
 
设置个异常试试<br>try<br>&nbsp; strlist.free;<br>except<br>&nbsp; showmessage('没有创建!')<br>end;
 
UnAssigned行不行??<br>我也没试过<br><br>if 变量名=UnAssigned then<br>begin<br>&nbsp; &nbsp; showmessage('没有创建');<br>end;
 
tstirnglist 很有意思<br>你即使不创建,给它add,他也不报错!
 
你的问题是因为你的stringlist一定是申明为局部变量了。申明为全局变量就没有问题了。<br>比如:<br>var MyStr: TStringList;<br>....<br>begin<br>&nbsp; &nbsp; &nbsp;//MyStr := TStringList.Create;<br>&nbsp; &nbsp; &nbsp;if Assigned(MyStr) then<br>&nbsp; &nbsp; &nbsp; &nbsp; ShowMessage('Assigned!')<br>&nbsp; &nbsp; &nbsp;else<br>&nbsp; &nbsp; &nbsp; &nbsp; ShowMessage('Unassigned!');<br>end;
 
原因是Assigned函数检查指针是否为nil,全局变量的指针自动初始化为nil,而局部的<br>不会,指针是个不定值。所以Assigned失效。<br><br>to 雪中漫步<br><br>不报错是因为你一定也是申明的局部变量,这个时候这个变量不是nil,所以没有报错,<br>但是不能访问它。<br>不如如果你接着再写: Self.Caption := MyStr[0];就出错了。<br>比如:<br>var<br>&nbsp; MyStr: TStringList;<br>begin<br>&nbsp; &nbsp; &nbsp;//MyStr := TStringList.Create;<br>&nbsp; &nbsp; &nbsp;MyStr.Add('a');<br>&nbsp; &nbsp; &nbsp;Caption := MyStr[0]; &nbsp;//出错!<br>&nbsp; &nbsp; &nbsp;if Assigned(MyStr) then<br>&nbsp; &nbsp; &nbsp; &nbsp; ShowMessage('Assigned!')<br>&nbsp; &nbsp; &nbsp;else<br>&nbsp; &nbsp; &nbsp; &nbsp; ShowMessage('Unassigned!');<br>end;<br><br><br>
 
同意,对变量的初始值要确定的把握.<br>曾有文章说为了效率,不作无用的初始化,<br>但我觉得多加几句没什么坏处.<br>局部变量是在堆栈中的,对象仅仅是一个指针
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部