【发布时间】:2009-04-25 03:06:56
【问题描述】:
我有一个 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 和 VS 2008。我不知道从一个项目到下一个项目会有什么不同会导致此错误。测试是一个控制台应用程序,程序是一个winforms应用程序。
什么条件会导致这些集合的默认属性发生变化?
编辑 - 感谢您提供的所有答案,这些答案告诉我如何遍历字典。然而,这些答案并没有不回答我的问题,即为什么我可以在一个项目而不是另一个项目中使用索引。我是否应该无法将代码从一个 .net 项目复制并粘贴到另一个项目并使其工作相同?而且,不,选项 strict 不是问题的原因。
编辑 - 尝试重现我所看到的:
- 使用 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
在子搜索中显示“dtf.Keys(idx) = 0”的行中,将光标放在右括号和退格之后,您应该会得到一个工具提示,上面写着“
我没有在我的其他项目中得到这个。尽管看起来我有相同的引用和设置。
【问题讨论】:
-
根据错误,您使用的是双键?这是故意的吗?
-
@neodymium:感谢您发布详细信息。我会调查的。您还应该提供有关“真实”项目的一些详细信息。
-
@neodymium:既然您知道问题所在,我建议您编辑主题行以反映实际情况。该问题实际上与默认属性无关。根据您当前的主题行,遇到相同问题的其他人可能不会找到此问题。
-
@John Saunders:上面列出的原始错误实际上与默认属性有关。如果这些是您收到的错误,那么这可能就是您要搜索的内容。如果您觉得有更好的标题,请随时自行更改。
-
我的问题很相似 - 一个控制台应用程序和一个测试项目无法匹配它在 XElement 树的行走。两者都引用了 System.Xml.Linq,但是当我将 System.Linq 添加到测试项目时,它开始与控制台应用程序一样工作 - 即使控制台应用程序没有引用该库! WTF?!
标签: vb.net properties default