如何使用WSDL中定义的自定义数组类型?

时间:2014-06-26 19:15:43

标签: c# delphi wsdl

尝试学习如何在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;

2 个答案:

答案 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以了解更多信息。