2009-04-15 137 views
2

我遇到了一个问题,即在服务的线程上运行时,没有正确访问对象集合。我可以在VS2008中运行我的单元测试,但是当我将调试器附加到服务时,我可以清楚地看到它不是从基于1的索引开始,而是从基于0的索引开始。我已经尝试了所有我能想到的方法来区分这一点,唯一的区别是它在服务中,而不是作为命令行应用程序运行。为什么我的集合决定从0开始而不是1开始?

当我调试该功能时,我也得到一个“属性评估失败”的消息,当我在单元测试中运行它时,我没有这个消息。

请指教。

[编辑]

我知道,通常的阵列从0我一直认为这一点,但今天我发现了此问题,并已经确定,即使我认为它从0开始启动,调试器显示,它从1开始。当我通过集合进行嬉戏时,它在VS中获得正确的价值,但在服务中却没有。

[编辑]

我使用Microsoft.VisualBasic.Collection,因为我可以把一个关键反对。一个字典对象也可以被使用,但现在已经以这种方式设置,这就是我的BLL Base类和其他众多函数如何读取它,所以改变它并不是最好的。

[溶液]

我使用dicitonary和Generic.KeyValuePair(串,对象),使得我不会有重写访问密钥的代码重构我的代码。现在应该工作得很好,因为它不像集体对象那样处理集合。

+0

您使用的是哪种类型的集合? – 2009-04-15 17:35:23

+0

Microsoft.VisualBasic.Collection – Middletone 2009-04-15 17:39:01

回答

4

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

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

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

更新

根据您的意见,你说你用在于Microsoft.VisualBasic.Collection对象。 Microsoft.VisualBasic.Collection对象使用1作为其起始索引。使用ArrayList对象,或者更好地使用通用List对象。

2

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

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

+0

它们应该但由于某种原因.net在集合对象中添加一个条目,并从1开始正常。 – Middletone 2009-04-15 17:37:41

相关问题