2016-01-05 147 views
0

我試圖找到一種將25列的單個記錄加載到數據表中的方法。在循環中生成屬性名稱

我可以列出名爲SPOT1SPOT25(數據表中的列)的所有25個變量,但我正在尋找更簡潔的方法,如使用循環或字典。

下面的代碼顯示了兩種方法,一種繁瑣的'長'方法和一種'簡潔'的方法,我試圖獲得幫助。

Public dctMC As Dictionary(Of String, VariantType) 
Dim newMC As New MONTE_CARLO() 

'long method: this will work but is cumbersome 
newMC.SPOT1=999 
newMC.SPOT2=887 
... 
newMC.SPOT25=5 

'concise method: can it be done more concisely, like in a loop for example? 
Dim k As String 

For x = 1 To 25 
    k = "SPOT" & CStr(x) 
    newMC.K = dctMC(k) 'convert newMC.k to newMC.SPOT1 etc 
Next 

'load record 
DATA.MONTE_CARLOs.InsertOnSubmit(newMC) 
+1

,而不是要求您輸入感知的幫助解決方案,請描述您嘗試解決的實際問題。 –

+2

正如@MitchWheat所說,有可能是一種更好的方式來達到你的目標,而不是你目前的嘗試方式。一種可能性是讓MONTE_CARLO具有返回數組或集合的'Spot'屬性,而不能容納25個不同的值。 – Blackwood

+0

@Mitch ... tks的反饋...我編輯了這個問題,我希望這更清楚。 – Zeus

回答

1

每別人,我覺得有更好的解決方案,但它是可能的...

Public Class MONTE_CARLO 
    Private mintSpot(-1) As Integer 
    Property Spot(index As Integer) As Integer 
    Get 
     If index > mintSpot.GetUpperBound(0) Then 
     ReDim Preserve mintSpot(index) 
     End If 
     Return mintSpot(index) 
    End Get 
    Set(value As Integer) 
     If index > mintSpot.GetUpperBound(0) Then 
     ReDim Preserve mintSpot(index) 
     End If 
     mintSpot(index) = value 
    End Set 
    End Property 
End Class 

用法......

Dim newMC As New MONTE_CARLO 
For i As Integer = 0 To 100 
    newMC.Spot(i) = i 
Next i 
MsgBox(newMC.Spot(20)) 
+0

感謝SSS,這就是我要找的。一個簡單的問題(我以前從未使用過屬性)如何爲說點(20)設置值?從函數調用'spot(20)= 555'' – Zeus

+0

是的,這是正確的'newMC.Spot(20)= 555'將設置屬性。在'Property Set'代碼中,'index'將被設置爲20,'value'將被設置爲555.數據的底層存儲位於數組'mintSpot()'中,該數組超出了範圍(即隱藏)的調用代碼。 – SSS

+0

謝謝你的幫助! – Zeus