这是出于好奇的问题。在研究上一个问题的ObjectBinaryToText行为时,我偶然发现了这个示例。第5行声明了string
变量,然后代码隐含地依赖于以下事实:管理了长字符串并且从不初始化该字符串,然后在第9行中用于初始化TStringStream
。我认为此代码不是100%正确,但是想知道为什么在这里包含s
吗? (不要看到任何背后的理由)
function ComponentToStringProc(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string; // line 5
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s); // line 9
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;
资料来源:documentation entry。
最佳答案
很难肯定地说,但是如果我不得不猜测的话,答案很可能是这样的:“ TStringStream不需要在当前版本中将字符串传递给构造函数,但是在早期版本的Delphi中,它确实需要这样做,而且此代码非常古老(可能一直追溯到D1),因此仍以这种方式编写,因为它工作得很好,而且没有人经历过更改它。”
关于delphi - 为什么要保留字符串变量以执行TStringStream的默认初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6415984/