2012-07-16 31 views
6

Tôi đã đập đầu vào tường trong 25 phút cố gắng tìm ra lý do tại sao tôi không thể truy cập chỉ mục 'đầu tiên' của một mảng, mà tôi đang cố gắng làm với mảng [0]. Tôi tiếp tục nhận được một Array Index Out of Bounds Exception. Chỉ để xem điều gì sẽ xảy ra, tôi đã thử sử dụng mảng [1] ... và nó đã hoạt động. Hoàn hảo. Tôi không biết tại sao.C# Outlook Add-In mảng Bắt đầu từ 1?

for (int i = 1; i < itemCounter+1; i++) 
{ 
    if (explorer.CurrentFolder.Items[i] is Outlook.MailItem) 
    { //Do something } 
} 

Toàn bộ điều hoạt động tốt. Những gì đang xảy ra ở đây?

+2

Tài liệu này nói gì? Âm thanh với tôi như 'Items' là một số loại tập hợp được bọc mà quá tải' toán tử [] 'và ném một' IndexOutOfRangeException' cho chỉ mục 0. Cũng lưu ý rằng các mảng VB là 1-indexed, vì vậy có lẽ đây là một shim tương thích? (nghe có vẻ kỳ quặc với tôi, nhưng này, ai biết được.) Bạn không thể chỉ nhìn trộm bộ sưu tập trong trình gỡ rối? –

+2

Có, hầu hết các bộ sưu tập trong Mô hình đối tượng văn phòng đều dựa trên một. Tôi đồng ý rằng tài liệu OOM được viết kém một cách kinh khủng. – Douglas

Trả lời

14

Dường như Outlook Object Model là một phần của Object Model Office, và như http://msdn.microsoft.com/en-us/library/aa189134%28v=office.10%29.aspx tiểu bang,

Hầu hết các bộ sưu tập được sử dụng trong các ứng dụng văn phòng (trừ Access) được một trụ sở, có nghĩa là, chỉ số số mục đầu tiên trong bộ sưu tập là 1.

Ngoài ra, http://msdn.microsoft.com/en-us/library/522xhsa3%28v=vs.90%29.aspx đặc biệt cho chúng ta biết

Để truy cập vào fi mục đầu tiên của một bộ sưu tập trong mô hình đối tượng của một ứng dụng Microsoft Office, sử dụng chỉ mục 1 thay vì 0.

+0

Hấp dẫn! Trong nghiên cứu của tôi về chủ đề này, tôi đã bỏ qua các bài viết giống như bài đầu tiên bạn liên kết, bởi vì nó đặc biệt nói Windows XP ở trên cùng, và tôi đang sử dụng Windows 7 (tôi không biết nó đã chuyển sang đâu!). Điều thứ hai thực sự là những gì tôi nên tìm kiếm, nhưng thậm chí thông qua các tìm kiếm của Google và tìm kiếm các hướng dẫn khác nhau của MSDN (và những người khác), tôi chưa bao giờ tìm thấy một liên kết hoặc giải thích. Cám ơn rất nhiều! – Jake

1

Có vẻ như các mục trả về một số collection object và những thứ này được biết là khó hiểu khi được truy cập với công cụ sửa đổi mảng như vậy. Bạn có thể làm .ToArray() để có được hành vi mà bạn mong đợi, nếu không bạn có thể chỉ cần sử dụng foreach var item in items và nhận mọi thứ trong thư mục, với cấu trúc chắc chắn cũng sẽ chấm dứt.

+0

Tương tự như những gì tôi đã nói trong bài bình luận của tôi với MvanGeest, tôi đã bỏ qua các bài viết như bạn đã liên kết, vì nó đề cập cụ thể đến VBA và tôi đang sử dụng C# .NET. . Toàn bộ điều này rất lạ đối với tôi ... Tôi chắc chắn sẽ sử dụng phương thức .ToArray() để mọi thứ hoạt động như nó nên, cảm ơn! – Jake

Các vấn đề liên quan