尝试学习如何在Delphi 7应用程序中使用WSDL。 我尝试使用的WSDL具有自定义数组类型。
帕斯卡
ArrayOfSomething = array of Something;
如何实例化此数组类型?
尝试过:
帕斯卡
var
somethingList : ArrayOfSomething;
begin
somethingList := ArrayOfSomething...
end;
上述...意味着我正在寻找一种方法而不是找到一种方法。我将实例化一个对象的正常方式:
帕斯卡
var
object : className;
begin
object := className.Create;
end;
所以你可以看到我为什么试图以同样的方式创建数组,即使它不是一个对象。
请记住,我正在试用C#代码并试图让它在Pascal中运行。 最初的C#就像:
C#
List<Something> somethingList = new List<Something>();
用法如下:
C#
envelope.listField = somethingList.ToArray();
我也试过这个:
帕斯卡
var
somethingList : TList;
begin
somethingList := TList.Create;
end;
是的,这一直有效,直到我尝试将其送入信封。
帕斯卡
envelope.listField := somethingList;
Envelope期待ArrayOfSomething不是TList。错误类似于&#34;不兼容的类型,TList和ArrayOfSomething。&#34;
答案 0 :(得分:3)
array of
是内置类型,它不是类。要设置其大小,请使用SetLength()
,例如
var
Arr: ArrayOfSomething;
begin
SetLength(Arr, 273);
另请注意,它与列表不同,它是一个没有内置插入或删除值的方法的数组。您不仅可以读取和更改值,还可以更改数组的大小。
如果你想要泛型,比如在C#中,你必须使用比7更高版本的Delphi。我不确定,但我认为它们是在Delphi 2010或Delphi XE中引入的。我猜有人可以更新我(更新:David Heffernan告诉我它的版本2009)
在这些更高版本中,您还可以使用TList&lt; T&gt;,这可能就是您想要的。在此之前,您可以使用TList,它保存指针(但不能直接与WSDL结合使用,因此可能必须先将内容移动到数组中)。您可能必须使用New(),Dispose()和强制转换才能使用它。
答案 1 :(得分:1)
type
ArrayOfSomething = array of Something;
这是一个Delphi动态数组。您通过调用SetLength
初始化它:
SetLength(somethingList, 42);
您应该阅读documentation for dynamic arrays以了解更多信息。