2013-02-14 201 views
0

我對5臺服務器上運行的相同服務進行相同的SOAP調用。返回的所有TWeeksHeld集合需要連接在一起形成一個輸出版本的同一對象(TDAEHeldList)。這裏是我的課:如何將對象添加到對象?

Partial Public Class TDAEHeldList  
    Private siteIdField As String   
    Private countField As Integer   
    Private returnCodeField As String   
    Private errorMessageField As String   
    Private daeWeeksHeldField() As TWeeksHeld 
End Class 

Partial Public Class TWeeksHeld   
    Private checkInField As String   
    Private resortNameField As String   
    Private countryField As String   
    Private regionField As String   
    Private localityField As String   
    Private weekIdField As String   
    Private bedroomsField As String   
    Private sleepsField As String   
    Private bookingTypeField As String   
    Private resortIdField As String   
    Private timeToExpiryField As String   
    Private specialFlagField As String   
    Private extMemberNoField As String   
    Private stockDisplayField As String   
    Private ownerBusCatCodeField As String 
End Class 

每次調用需要的daeWeeksHeldField()集合的內容添加到輸出類daeWeeksHeldField()集合。

我有以下工作:

Dim returnData As New TDAEHeldList 
Dim weeksOnHold As New TDAEHeldList 
Dim weeksOnHoldArray As TWeeksHeld 
weeksOnHold = WSCaller.GetForeignWeeksOnHold(siteID,affiliateMemberID) 

然後嘗試添加

weeksOnHoldArray += String.Concat(weeksOnHoldArray, weeksOnHold.daeWeeksHeldField) 

通過如下:

returnData.daeWeeksHeldField = weeksOnHoldArray.ToArray(GetType(TWeeksHeld)) 

我也試過:

for Each x As Object In weeksOnHold.daeWeeksHeld 
    weeksOnHoldArray.Add(x) 
Next 

加上一些其他谷歌技術。我想做或不做,如果是的話,它是如何做的?

回答

0

您參考daeWeeksHeldField屬性集合,但它不是一個集合。它是一個數組。數組當然有它們的用途,但在這種情況下,你真正想要的是一個集合。集合允許您輕鬆添加新項目。另一方面,數組不能動態增長,所以如果列表的大小不固定,它們會變得很麻煩。

使用最常見的集合,我推薦的集合是List(Of T)。這裏是你將如何使用它:

Dim combinedWeeksOnHold As New List(Of TWeeksHeld) 
Dim weeksOnHold1 = WSCaller1.GetForeignWeeksOnHold(siteID1, affiliateMemberID1) 
If weeksOnHold1.daeWeeksHeldField IsNot Nothing Then 
    combinedWeeksOnHold.AddRange(weeksOnHold1.daeWeeksHeldField) 
End If 
Dim weeksOnHold2 = WSCaller2.GetForeignWeeksOnHold(siteID2, affiliateMemberID2) 
If weeksOnHold2.daeWeeksHeldField IsNot Nothing Then 
    combinedWeeksOnHold.AddRange(weeksOnHold2.daeWeeksHeldField) 
End If 

如果你真的需要它們的排列,在任何時候,你可以調用List(Of T).ToArray,像這樣:

Dim array() As TWeeksHeld = combinedWeeksOnHold.ToArray() 
+0

感謝。一個不錯的技術。但是,daeWeeksHeldField中的某些字段爲空(無),因此會引發異常。 – Craig 2013-02-14 18:53:29

+0

如果數組中項目的任何屬性都爲null,則AddRange方法不會引發異常。你需要更具體。你嘗試了什麼,哪條線拋出了異常,它是什麼樣的例外? – 2013-02-14 18:59:55

+0

引起異常的行是:combinedWeeksOnHold.AddRange(weeksOnHold.daeWeeksHeldField) 而異常是一個System.ArgumentNulException的值「值不能爲空 參數名稱:集合」 – Craig 2013-02-14 20:16:05