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

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

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

当我调试该函数时,我还会收到“属性评估失败”消息,而在单元测试中运行它时则不会收到该消息。

请指教。

[编辑]

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

[编辑]

我正在使用 Microsoft.VisualBasic.Collection,因为我可以对它放置一个键。也可以使用字典对象,但现在已经以这种方式设置了,这就是我的 BLL 基类和其他众多函数读取它的方式,因此最好不要更改它。

[解决方案]

我使用字典和 Generic.KeyValuePair(Of String, Object) 重构了我的代码,这样我就不必重写访问键的代码。现在应该可以正常工作了,因为它处理集合的方式与集合对象不同。

最佳答案

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

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

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

更新

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

关于.net - 为什么我的收藏决定从 0 而不是 1 开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/752801/

相关文章:

c# - 单个 SQL Server 表上的死锁

c - 如何解释 "error C2018: unknown character ' 0x40'?

c++ - 如何将请求的客户端连接的 IP 与 QTcpSocket 类中已识别的 IP 之一进行比较?

ruby - 调试线程化的 ruby​​ 应用程序

c# - 将 XML 反序列化为列表<>

C# 不读取我的输入

c# - 启动过程问题

java - Notify 方法与多个线程等待

c# - 如何避免普通库和通用库之间的重复?

.net - 德尔福和.NET。使用 Visual Studio