7

配列の「最初の」インデックスにアクセスできない理由を突き止めようとして、25 分間壁に頭をぶつけていました。Array Index Out of Bounds Exception が発生し続けました。何が起こるかを確認するために、array[1] を使用してみました...そしてうまくいきました。完璧に。理由がわかりません。

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

全体が正常に動作します。何が起きてる?

4

2 に答える 2

17

OutlookオブジェクトモデルはOfficeオブジェクトモデルの一部であり、http://msdn.microsoft.com/en-us/library/aa189134%28v=office.10%29.aspxに記載されているように、

Officeアプリケーション(Accessを除く)で使用されるほとんどのコレクションは1ベースです。つまり、コレクションの最初のアイテムのインデックス番号は1です。

また、http://msdn.microsoft.com/en-us/library/522xhsa3%28v=vs.90%29.aspxは、具体的に次のことを示しています。

Microsoft Officeアプリケーションのオブジェクトモデルのコレクションの最初のアイテムにアクセスするには、0ではなくインデックス1を使用します。

于 2012-07-16T20:31:23.257 に答える
1

ええ、Itemsはコレクションオブジェクトを返すように見えます、そしてそれらはそのような配列修飾子でアクセスされるとき厄介であることが知られています。.ToArray()を実行して、期待する動作を取得できるはずです。そうでない場合は、foreach var item in items終了が保証されている構造を使用して、フォルダー内のすべてを使用して取得することもできます。

于 2012-07-16T20:28:57.767 に答える