Rol*_*son 4 delphi delphi-2007
我在字符串列表中有类名.例如,它可能是'TPlanEvent','TParcel','TCountry'等.
现在我想通过循环列表找出大小.
它的作用是:
Size := TCountry.InstanceSize;
Run Code Online (Sandbox Code Playgroud)
但我希望这样:
for i := 0 to ClassList.Count - 1 do
Size := StringToClass(ClassList[i]).InstanceSize;
Run Code Online (Sandbox Code Playgroud)
显然我的问题是编写什么而不是StringToClass方法来将字符串转换为类.
Ond*_*lle 10
既然您正在使用字符串列表,那么您也可以在那里存储类:
var
C: TClass;
StringList.AddObject(C.ClassName, TObject(C));
Run Code Online (Sandbox Code Playgroud)
...
for I := 0 to StringList.Count - 1 do
Size := TClass(StringList.Objects[I]).InstanceSize;
Run Code Online (Sandbox Code Playgroud)
...
在Delphi 2010中,您可以使用:
function StringToClass(AName: string): TClass;
var
LCtx: TRttiContext;
LTp: TRttiType;
begin
Result := nil;
try
LTp := LCtx.FindType(AClassName);
except
Exit;
end;
if (LTp <> nil) and (LTp is TRttiInstanceType) then
Result := TRttiInstanceType(LTp).Metaclass;
end;
Run Code Online (Sandbox Code Playgroud)
一个说明.由于您只将类名保留在列表中,因此此方法不起作用,因为TRttiContext.FindType需要完全限定的类型名称(例如,uMyUnit.TMyClass).修复方法是在循环或列表中附加存储这些类的单元.
| 归档时间: |
|
| 查看次数: |
7127 次 |
| 最近记录: |