TStrings与TStringlist的相互转换及函数返回值内存释放问题(50分)

  • 主题发起人 主题发起人 cxx1997
  • 开始时间 开始时间
C

cxx1997

Unregistered / Unconfirmed
GUEST, unregistred user!
1:由于程序中TStrings与TStringlist用的很多,但两者并不互相通用,特别是作为函数参数时。
由于DELPHI类型要求比较严格,特别在VAR 型时,必须要自己转换、释放,相当烦人。
如procedure Compare2StrL(StrL1:TStringlist;var StrL2:TStringlist);
而我有两个TSTRINGS的,就无法直接用。要不就要重载这个函数。不知道各位大侠有何高见
2:为了解决这个问题,我写了个函数function StrsToStrList(strs:TStrings):TStringList;
begin Result:=TStringList.Create;Result.AddStrings(strs)
end;
但用的时候,
var
strl:TStringList;
begin
strl:= StrsToStrList(Memo1.Lines);
strl.Free
必须要自己释放,否则内存就被消耗掉了。
Compare2StrL(StrsToStrList(Memo1.Lines),StrsToStrList(Memo2.Lines));
也不能直接这样用,内存被消耗了。
end;
不知道各位又有何高见??
 
不明白你的意思,TStringlist是有TStrings继承而来,Delphi中的函数一般都
喜欢用TStrings作为参数类型,但真正创建的是TStringlist。你的互相通用
是什么意思?Compare2StrL我找不到!能贴一下StrsToStrList的源码?
 
应该不用这么麻烦!如果你要用TStrings你可以用TStringList来建立他!
var
strl:TStrings;
begin
strl:=TStringList.Create;
strl.assign(Memo1.Lines);
.....
strl.Free;
.....
end;
 
>如procedure Compare2StrL(StrL1:TStringlist;var StrL2:TStringlist);
请改为 :procedure Compare2StrL(StrL1:TStrings;var StrL2:TStrings);

 
>>mywyn
function StrsToStrList(strs:TStrings):TStringList;
begin Result:=TStringList.Create;Result.AddStrings(strs)
end;
>>kkyy
改为procedure Compare2StrL(StrL1:TStrings;var StrL2:TStrings);
后strl2就不能传递TSTRINGLIST类型的了(类型不兼容)
 
>>改为procedure Compare2StrL(StrL1:TStrings;var StrL2:TStrings);
后strl2就不能传递TSTRINGLIST类型的了(类型不兼容)
这样做:
var bb,aa:tstrings;
bb:=tstringlist.Create;
aa:=tstringlist.Create;
compare2strl(aa,bb);
 
不要使用TSTRINGLIST,如果要永就用TSTRINGS!
Tstrings类型的对象可以用tstringlist
来创建

 
我已经写了很多用TSTRINGLIST的了,现在要改,真是气死人了!
有没有更好的方法??
 
我想啊,你主要是想节省内存空间吧,你可以在关联MEMO的时候先判断一下MEMO中有没有字
符,如有就用copy弄出来或用其它的方法进行限制哦,没有的话就不用了,直接赋空值吧!
我不知道这样行吗?只是随便想出来的,你考虑一下吧!
 
形参用TStrings,因为TStringList为TStrings的子类,调用的时候可以直接传递TStringList
类型。
例如:你的过程应该为
procedure Compare2StrL(StrL1:TStrings;var StrL2:TStrings);
这样就没有上述问题了
 
多人接受答案了。
 
后退
顶部