2012-01-09 14 views
14

Tôi đang xem xét bản dịch tự động của mã VB6 thành C# và công cụ chuyển đổi đã dịch someArray(3) thành someArray[3]. Nhưng phù hợp với tài liệu mã cũ, nó nên chọn phần tử thứ ba không phải là phần tử thứ tư như nó đang làm trong phiên bản đã dịch.Các chỉ mục mảng có dựa trên 0 trong VB6 không?

Các chỉ mục mảng có dựa trên 0 trong VB6 không? Hay họ bắt đầu lúc 1?

+0

Đây có phải là mảng * khai báo * hay truy cập phần tử * mảng * không? –

+0

@Cody Truy cập phần tử mảng. –

Trả lời

14

Có - mảng là (nói chung) 0 có trụ sở tại VB6

Các trường hợp ngoại lệ này là khi Dim someArray(1 To 10) as Int cú pháp rõ ràng đã được sử dụng, hoặc khi Option Base 1 được khai báo ở trên cùng của các mô-đun mã.

Đó là Collections không phải là - khi bạn lặp qua các đối tượng Collection Tôi khá chắc chắn rằng chúng dựa trên 1.

+4

"Trừ khi loại cú pháp rõ ràng đã được sử dụng" * Hoặc * 'Tùy chọn cơ sở 1' đã được khai báo ở đầu khối mã –

+0

@Matt: Điểm tốt. –

+0

@Matt Tuyên bố này chỉ ảnh hưởng đến tệp hiện tại? –

6

Câu trả lời ngắn gọn là các giới hạn dưới của mảng là những gì bạn cho biết.

Các mặc định là cơ sở 0 (trừ khi ghi đè bởi Option Base 1), nhưng bạn có thể khai báo thấp hơn bị ràng buộc với bất kỳ giá trị mà bạn muốn (Dim arr(-42 To 42) là có giá trị như Dim(3)).

Ngoài ra, nếu một mảng được trả về bởi một số đối tượng, giới hạn dưới của nó là bất kỳ đối tượng nào đặt nó. Ví dụ: tham chiếu ExcelRange.Value sẽ trả lại mảng dựa trên 1.