2012-07-16 4 views
6

私はアレイの[最初の]インデックスにアクセスできない理由を調べるために、25分間壁に向かって頭を叩きました。私はArray Index Out of Bounds Exceptionを取得し続けました。何が起こるかを見てみると、私はarray [1]を使ってみました...そしてうまくいきました。完璧に。なぜ私は考えていない。C#Outlookアドインアレイ1から開始しますか?

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

すべてが問題なく動作します。何が起きてる?

+2

ドキュメントは何を表していますか? 'Items'のようなサウンドは' operator [] 'をオーバーロードし、インデックス0に対して' IndexOutOfRangeException'をスローするいくつかのラップされたコレクション型です。また、VB配列はインデックスが1つで、おそらくこれは互換性のシムですか? (私には奇妙に聞こえますが、ちょっと、誰が知っていますか?)あなたはデバッガのコレクションをちょう​​ど見ることはできませんか? –

+2

はい、Officeオブジェクトモデルのほとんどのコレクションは1ベースです。私は、OOMのドキュメントが苦労して書かれていることに同意します。 – Douglas

答えて

14

これは、Outlookオブジェクトモデルは、Officeのオブジェクトモデルの一部であり、http://msdn.microsoft.com/en-us/library/aa189134%28v=office.10%29.aspx状態、

として(アクセス除く)Officeアプリケーションで使用されるほとんどのコレクションは1ベースのしていることが表示されます、それは、指標でありますコレクション内の最初の項目の数は1

また、http://msdn.microsoft.com/en-us/library/522xhsa3%28v=vs.90%29.aspxは特にFiを提供してアクセスするには

ことを教えてくれるですMicrosoft Officeアプリケーションのオブジェクトモデルのコレクションの最初の項目に0の代わりに1のインデックスを使用します。

+0

魅力的!この件に関する私の研究では、リンク先の最初の記事をスキップしました。具体的には、Windows XPが一番上にあり、Windows 7を使用しているからです。 2番目は本当に私が探していたはずのものですが、私のGoogleの検索やさまざまなMSDN(と他の)チュートリアルを見ても、リンクや説明は見つかりませんでした。本当にありがとう! – Jake

1

ええ、Itemsはcollection objectを返すようですが、そのような配列修飾子を使ってアクセスした場合、それらはうまくいきます。 .ToArray()を使用して期待する動作を得ることができなければなりません。それ以外の場合は、単にforeach var item in itemsを使用して、フォルダ内のすべてを取得することができます。

+0

MvanGeestへの私のコメントで述べたのと同じように、あなたがリンクしているもののような記事をスキップしました。なぜなら、特にVBAを言い、C#.NETを使用しているからです。 。すべてが私にとって非常に奇妙です...私は間違いなく.ToArray()メソッドを使用していますので、すべてがうまくいくように動作します。ありがとう! – Jake

関連する問題