如何使用WSDL中定义的自定义数组类型
本文关键字:自定义 数组 类型 定义 何使用 WSDL | 更新日期: 2023-09-27 18:10:22
尝试学习如何在Delphi7应用程序中使用WSDL。我尝试使用的WSDL有一个自定义数组类型。
Pascal
ArrayOfSomething = array of Something;
如何实例化此数组类型
尝试过:
Pascal
var
somethingList : ArrayOfSomething;
begin
somethingList := ArrayOfSomething...
end;
。。。上面的意思是我正在寻找一种方法,但没有找到。我实例化对象的正常方式是:
Pascal
var
object : className;
begin
object := className.Create;
end;
所以你可以理解为什么我会尝试以同样的方式创建数组,即使它不是一个对象。
请记住,我正在抄袭C#代码,并试图使其在Pascal中工作。原始C#类似于:
C#
List<Something> somethingList = new List<Something>();
用法如下:
C#
envelope.listField = somethingList.ToArray();
我也试过这个:
Pascal
var
somethingList : TList;
begin
somethingList := TList.Create;
end;
是的,在我试着把它放进信封之前,这是有效的。
Pascal
envelope.listField := somethingList;
信封应为ArrayOfSomething而不是TList。错误类似于"不兼容类型,TList和ArrayOfSomething"。
array of
是一个内置类型,它不是一个类。要设置其大小,请使用SetLength()
,例如
var
Arr: ArrayOfSomething;
begin
SetLength(Arr, 273);
还要注意,它与列表不同,它是一个没有内置方法插入或删除值的数组。您可以读取和更改值,或更改数组的大小,不再需要。
如果你想要泛型,比如C#,你必须使用比7更高版本的Delphi。我不确定,但我认为它们是在德尔福2010或德尔福XE中引入的。我想有人可以向我更新这一点(更新:David Heffernan告诉我这是2009年的版本(
在这些更高版本中,您还可以使用TList<T>,这可能正是你想要的。在此之前,您可以使用TList,它保存指针(但不能直接与WSDL结合使用,因此内容可能必须首先移动到数组中(。您可能需要使用New((、Dispose((和强制转换才能使用它。
type
ArrayOfSomething = array of Something;
这是一个Delphi动态数组。您可以通过调用SetLength
:来初始化它
SetLength(somethingList, 42);
您应该阅读动态数组的文档以了解更多信息。