为什么我的收藏决定从0而不是1开始?

时间:2009-04-15 17:21:59

标签: .net visual-studio-2008 multithreading debugging service

我遇到的问题是,当从服务的线程上运行时,没有正确访问对象集合。我可以在VS2008中运行我的单元测试,但是当我将调试器连接到服务时,我可以清楚地看到它不是从基于1的索引开始,而是从基于0的索引开始。我已经尝试了所有我能想到的东西来隔离它,唯一的区别是它在服务中而不是作为命令行应用程序运行。

当我调试该函数时,我也收到“属性评估失败”消息,当我在单元测试中运行时,我不会这样做。

请告知。

[编辑]

我知道数组通常从0开始。我总是假设这个但是今天我发现了这个错误,并确定即使我认为它从0开始,调试器显示它从1开始。当我iiterate通过集合,它在VS中获得正确的值,但不在服务中。

[编辑]

我正在使用Microsoft.VisualBasic.Collection,因为我可以放一个密钥来对付它。也可以使用字典对象,但现在已经按照这种方式进行设置,这就是我的BLL基类和其他众多函数如何读取它,因此不宜更改它。

[溶液]

我使用dicitonary和Generic.KeyValuePair(Of String,Object)重构了我的代码,这样我就不必重写访问密钥的代码了。应该正常工作,因为它不像处理collecitons对象那样处理集合。

2 个答案:

答案 0 :(得分:4)

默认情况下,.NET语言以数组索引0开头,除非你为VB.NET明确指定从1开始。

我不相信有一种方法可以在VB程序集之外强制执行此数组约定,因此,当它们通过Windows远程处理或Web服务时,它们将恢复为基于0的索引约定。

为了您的理智,我建议您重构所有代码以使用0索引集合和数组。

<强>更新

根据您的评论,您说您使用了Microsoft.VisualBasic.Collection对象。 Microsoft.VisualBasic.Collection对象使用1作为其起始索引。使用ArrayList对象,或者更好的是使用通用List对象。

答案 1 :(得分:2)

.NET Framework中的所有集合都从0开始,数组也是如此。总是

从您的评论中,您使用的是一些特殊的Visual Basic集合类型。我建议你摆脱这种习惯,因为我认为这种类型是为了与VB6的互操作性。