.NET默认属性错误

use*_*755 6 vb.net default properties

我有一个VB.NET项目,我可以使用索引迭代键和值字典对象的集合:


MyDictionary.Keys(idx)
MyDictionary.Values(idx)
Run Code Online (Sandbox Code Playgroud)

当此代码从测试项目中获取并放入实际项目时,我收到以下错误:

'System.Collections.Generic.Dictionary(Of Double,String).KeyCollection'无法编入索引,因为它没有默认属性.

'System.Collections.Generic.Dictionary(Of Double,String).ValueCollection'无法编入索引,因为它没有默认属性.

这是使用VB.NET和VS 2008.我不知道从一个项目到下一个会导致此错误的项目有什么区别.测试是一个控制台应用程序,该程序是一个winforms应用程序.

什么条件会导致这些集合的默认属性发生变化?

编辑 - 感谢所有答案,告诉我如何循环字典.然而,这些答案并没有回答我为什么可以在一个项目中使用索引而不在另一个项目中使用索引的问题.我是否应该无法将代码从一个.net项目复制并粘贴到另一个.net项目并使其工作相同?并且,不,选项严格,不是问题的原因.

编辑 - 尝试重现我所看到的内容:

  • 使用VS 2008创建新的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
Run Code Online (Sandbox Code Playgroud)

在子搜索中"dtf.Keys(idx)= 0"的行中,将光标放在右括号和退格后,你应该得到一个工具提示,上面写着"<Extension> ElementAtOrDefault(index as Integer)为Double - index:要检索的索引的基于零的元素.

我没有在我的其他项目中得到它.即使看起来我有相同的参考和设置.

Cha*_*ant 4

KeyCollection 没有实现这样的索引器,您必须通过 MyDictionary.Keys 进行枚举。

C#

foreach(double key in MyDictionary.Keys)
 Console.Write( MyDictionary[ key ] )
Run Code Online (Sandbox Code Playgroud)

VB

For Each key As Double in MyDictionary.Keys
   Console.Write( MyDictionary( key )
Next key
Run Code Online (Sandbox Code Playgroud)

使用 for(;i++;) 循环并不是遍历哈希表(字典)的正确方法,因为它不是数组,它实际上没有数组索引(array[index])的概念


归档时间:

查看次数:

5337 次

最近记录:

10 年,8 月 前