该过程如下所示:
type TObjectArray = Array of TObject;...procedure TMyClass.DoAssignObjectList(const ObjectArray: TObjectArray; const DstList: TObject);var i: Integer;begin if DstList is TObjectList then begin for i := 0 to pred(TObjectList(DstList).Count) do TObjectList(DstList).Add(ObjectArray[i]); end else if DstList is TObjectList<T> then // ObvIoUsly this doesn't work begin for i := 0 to pred(TObjectList<T>(DstList).Count) do TObjectList<T>(DstList).Add(ObjectArray[i]); end else begin raise Exception.CreateFmt(StrNodoAssignorMObject,[DstList.Classname]); end;end;
如何检查对象是否是TObjectList< T>然后添加一个数组的元素?
解决方法 您必须使用一点RTTI来获取有关泛型类型的更多信息.下面的代码使用Spring4D,它有一些方法:
uses ... Spring.Reflection;procedure DoAssignObjectList(const ObjectArray: TObjectArray; const DstList: TObject); function IsGenericTObjectList(const obj: TObject): Boolean; var t: TRttiType; begin t := TType.GetType(obj.ClassInfo); Result := t.IsGenericType and (t.GetGenericTypeDeFinition = 'TObjectList<>'); end;begin ... if IsGenericTObjectList(DstList) then begin for i := 0 to pred(TObjectList<TObject>(DstList).Count) do TObjectList<TObject>(DstList).Add(ObjectArray[i]); ...end;
除此之外,您还可以获取有关列表的通用参数类型的信息,以检查您放入其中的对象是否符合要求(仅适用于通用类型的课程):
function GetGenericTObjectListParameter(const obj: TObject): TClass;var t: TRttiType;begin t := TType.GetType(obj.ClassInfo); Result := t.GetGenericArguments[0].AsInstance.Metaclasstype;end;总结
以上是内存溢出为你收集整理的delphi – 如何将TObject转换为TObjectList?全部内容,希望文章能够帮你解决delphi – 如何将TObject转换为TObjectList?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)