インデックスを使用してディクショナリオブジェクトのキーと値のコレクションを反復処理できるVB.NETプロジェクトがあります。
MyDictionary.Keys(idx)
MyDictionary.Values(idx)
このコードをテストプロジェクトから取得して実際のプロジェクトに配置すると、次のエラーが発生します。
'System.Collections.Generic.Dictionary(Of Double、String).KeyCollection'にはデフォルトのプロパティがないため、インデックスを作成できません。
と
'System.Collections.Generic.Dictionary(Of Double、String).ValueCollection'にはデフォルトのプロパティがないため、インデックスを作成できません。
これはVB.NETとVS2008を使用しています。このエラーの原因となるプロジェクトごとの違いがわかりません。テストはコンソールアプリケーションであり、プログラムはwinformsアプリです。
これらのコレクションのデフォルトのプロパティが変更される原因となる条件は何ですか?
編集-辞書をループする方法を教えてくれるすべての答えをありがとう。ただし、これらの回答は、なぜ一方のプロジェクトでインデックスを使用でき、もう一方のプロジェクトでは使用できないのかという私の質問には答えません。ある.netプロジェクトから別のプロジェクトにコードをコピーして貼り付け、同じように機能させることはできませんか?そして、いいえ、オプションは厳密ですが、問題の原因ではありません。
編集-私が見ているものを再現しようとします:
- VS2008を使用して新しいVB.NETコンソールアプリケーションを作成する
- 次のコードをコピーしてモジュールに貼り付けます。
Imports System.Collections
Imports System.Collections.Generic
Module Module1
Public dtf As Dictionary(Of Double, String)
Public Sub BuildDictionary()
dtf = New Dictionary(Of Double, String)
dtf.Add(1.0, "1")
dtf.Add(0.0, "0")
End Sub
Public Sub Search()
For idx As Integer = 0 To dtf.Keys.Count - 1
If dtf.Keys(idx) = 0 Then
Exit Sub
End If
Next
End Sub
Sub Main()
End Sub
End Module
「dtf.Keys(idx)= 0」というサブ検索の行で、右括弧とバックスペースの後にカーソルを置くと、「<Extension> ElementAtOrDefault(index as Integer)as Double --index:」というツールチップが表示されます。取得するインデックスのゼロベースの要素。
他のプロジェクトではそれがわかりません。私は同じ参照と設定を持っているように見えますが。