2012-10-08 33 views
1

我使用下面的代碼:不能添加到收藏在VB.NET(複製除外)

Dim questions = db.Tbl_Challenge_Questions.Where(Function(x) x.Quest_Challenge_ID = challengeId) 

    Dim answersToQuestions = New Collection 

    For Each question As Tbl_Challenge_Question In questions 

     Dim questionId = question.Quest_ID 
     Dim answer = question.Tbl_Challenge_Question_Answer.Where(Function(x) x.QAns_Question_ID = questionId).FirstOrDefault.QAns_Answer() 
     Debug.Print("Quest_ID=" + question.Quest_ID.ToString) 
     Debug.Print("answer=" + answer) 
     'answersToQuestions.Add(question.Quest_ID, answer) 

    Next 

它輸出這樣的:

Quest_ID=1 
answer=True 
Quest_ID=2 
answer=150 minutes 
Quest_ID=3 
answer=True 
Quest_ID=4 
answer=False 
Quest_ID=5 
answer=Continuing to smoke 

當我取消註釋行添加到收藏answersToQuestions.Add(question.Quest_ID, answer),它輸出這樣的錯誤:

Quest_ID=1 
answer=True 
Quest_ID=2 
answer=150 minutes 
Quest_ID=3 
answer=True 
A first chance exception of type 'System.ArgumentException' occurred in Microsoft.VisualBasic.dll 
The program '[4948] WebDev.WebServer40.EXE: Managed (v4.0.30319)' has exited with code 0 (0x0). 

添加失敗。提供重複的鍵值。

似乎沒有任何重複。我如何將所有這些項目添加到我的收藏中?

謝謝。

+2

使用強類型集合,如Dictionary(整數,字符串)不是更好嗎? –

+0

什麼類型的「集合」請提供代碼或鏈接到MSDN – Jodrell

+3

@Jodrell - 我懷疑它是[這一個](http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.collection。 aspx),因爲它是我能找到的唯一一個叫做'Collection'的類,b)不是泛型的,並且c)有一個接受多個參數的'Add'方法。 –

回答

2

你可以試試這個,看看它的工作原理:

Dim questions = db.Tbl_Challenge_Questions.Where(Function(x) x.Quest_Challenge_ID = challengeId) 

    Dim answersToQuestions = New Dictionary(Of Integer, String) 

    For Each question As Tbl_Challenge_Question In questions 

     Dim questionId = question.Quest_ID 
     Dim answer = question.Tbl_Challenge_Question_Answer.Where(Function(x) x.QAns_Question_ID = questionId).FirstOrDefault.QAns_Answer() 
     Debug.Print("Quest_ID=" + question.Quest_ID.ToString) 
     Debug.Print("answer=" + answer) 
     answersToQuestions.Add(question.Quest_ID, answer) 
    Next 







    Next 
+0

完美的作品。謝謝。我仍然習慣於VB.NET中不同類型的集合。在我的本地PHP中,只有一個:'array()':) – user1477388

+1

@ user1477388,IMO通常避免使用'Microsoft.VisualBasic'命名空間 – Jodrell

+0

對於我來說,很難掌握哪些函數屬於哪個命名空間。 – user1477388

3

你使用Visual Basic特定Collection類(專供遺留代碼庫,真的)。

Add方法希望傳遞Item,然後Key,不Key然後Item

public void Add(
    Object Item, 
    string Key, 
    Object Before, 
    Object After 
) 

你已經有一個值,在那裏與關鍵True ...

正如@保羅格里姆肖建議,我也推薦使用通用類型,例如Dictionary(Of TKey,TValue)