<p>在Outlook中,迭代文件夹中的所有项目并不是一个好主意。相反,我建议使用<code>Items</code>类的<code>Find</code>/<code>FindNext</code>或<code>Restrict</code>方法提取块中的项。您可以在以下系列文章中阅读有关这些方法的更多信息:</p>
<ul>
<li><a href="https://www.add-in-express.com/creating-addins-blog/2011/11/11/outlook-retrieve-calendar-items/" rel="nofollow noreferrer">How To: Retrieve Outlook calendar items using Find and FindNext methods</a></li>
<li><a href="https://www.add-in-express.com/creating-addins-blog/2011/11/15/outlook-restrict-calendar-items/" rel="nofollow noreferrer">How To: Use Restrict method in Outlook to get calendar items</a></li>
</ul>
<p><code>Restrict</code>方法是使用<code>Find</code>方法或<code>FindNext</code>方法迭代集合中特定项的替代方法。如果有少量项,则<code>Find</code>或<code>FindNext</code>方法比过滤更快。如果集合中有大量项,则<code>Restrict</code>方法的速度要快得多,尤其是如果在一个大集合中只希望找到少数项时</p>
<p>例如,C#中列出的示例代码显示如何使用<code>Restrict</code>方法:</p>
<pre><code>private void RestrictCalendarItems(Outlook.MAPIFolder folder)
{
DateTime dtEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
DateTime.Now.Day, 23, 59, 00, 00);
string restrictCriteria = "[Start]<=\"" + dtEnd.ToString("g") + "\"" +
" AND [End]>=\"" + DateTime.Now.ToString("g") + "\"";
StringBuilder strBuilder = null;
Outlook.Items folderItems = null;
Outlook.Items resultItems = null;
Outlook._AppointmentItem appItem = null;
int counter = default(int);
object item = null;
try
{
strBuilder = new StringBuilder();
folderItems = folder.Items;
folderItems.IncludeRecurrences = true;
folderItems.Sort("[Start]");
resultItems = folderItems.Restrict(restrictCriteria);
item = resultItems.GetFirst();
do
{
if (item != null)
{
if (item is Outlook._AppointmentItem)
{
counter++;
appItem = item as Outlook._AppointmentItem;
strBuilder.AppendLine("#" + counter.ToString() +
"\tStart: " + appItem.Start.ToString() +
"\tSubject: " + appItem.Subject +
"\tLocation: " + appItem.Location);
}
Marshal.ReleaseComObject(item);
item = resultItems.GetNext();
}
}
while (item != null);
if (strBuilder.Length > 0)
Debug.WriteLine(strBuilder.ToString());
else
Debug.WriteLine("There is no match in the "
+ folder.Name + " folder.");
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
finally
{
if (folderItems != null) Marshal.ReleaseComObject(folderItems);
if (resultItems != null) Marshal.ReleaseComObject(resultItems);
}
}
</code></pre>
<p>因此,您可以在一个小的时间段内处理订购的项目</p>