2009-04-15 118 views
2

我遇到了一個問題,即在服務的線程上運行時,沒有正確訪問對象集合。我可以在VS2008中運行我的單元測試,但是當我將調試器附加到服務時,我可以清楚地看到它不是從基於1的索引開始,而是從基於0的索引開始。我已經嘗試了所有我能想到的方法來區分這一點,唯一的區別是它在服務中,而不是作爲命令行應用程序運行。爲什麼我的集合決定從0開始而不是1開始?

當我調試該功能時,我也得到一個「屬性評估失敗」的消息,當我在單元測試中運行它時,我沒有這個消息。

請指教。

[編輯]

我知道,通常的陣列從0我一直認爲這一點,但今天我發現了此問題,並已經確定,即使我認爲它從0開始啓動,調試器顯示,它從1開始。當我通過集合進行嬉戲時,它在VS中獲得正確的價值,但在服務中卻沒有。

[編輯]

我使用Microsoft.VisualBasic.Collection,因爲我可以把一個關鍵反對。一個字典對象也可以被使用,但現在已經以這種方式設置,這就是我的BLL Base類和其他衆多函數如何讀取它,所以改變它並不是最好的。

[溶液]

我使用dicitonary和Generic.KeyValuePair(串,對象),使得我不會有重寫訪問密鑰的代碼重構我的代碼。現在應該工作得很好,因爲它不像集體對象那樣處理集合。

+0

您使用的是哪種類型的集合? – 2009-04-15 17:35:23

+0

Microsoft.VisualBasic.Collection – Middletone 2009-04-15 17:39:01

回答

4

默認情況下,.NET語言以數組索引0開頭,除非您明確指定從VB.NET開始指定1。

我不認爲有一種方法可以在VB程序集之外強制執行此數組約定,因此,當它們通過Windows遠程處理或Web服務時,它們將恢復爲基於0的索引約定。

爲了您的理智,我建議您重構所有代碼,以便使用0索引的集合和數組。

更新

根據您的意見,你說你用在於Microsoft.VisualBasic.Collection對象。 Microsoft.VisualBasic.Collection對象使用1作爲其起始索引。使用ArrayList對象,或者更好地使用通用List對象。

2

.NET Framework中的所有集合都以0開頭,數組也是如此。總是。

從您的評論中,您正在使用一些特殊的Visual Basic集合類型。我建議你擺脫這種習慣,因爲我相信這種類型是爲了與VB6互操作。

+0

它們應該但由於某種原因.net在集合對象中添加一個條目,並從1開始正常。 – Middletone 2009-04-15 17:37:41

相關問題