>我正在使用Office 365的Outlook,这是C#中的代码,我必须删除"已删除邮件"文件夹中的项目。
当我进行此转换时,它会给出错误:
var idList = (from MailItem item in binFolder.Items select item.EntryID).ToList();
这是完整的代码:
public void DeleteBin()
{
ApplicationClass outlookApp = new ApplicationClass();
var binFolder = outlookApp.Session
.GetDefaultFolder(OlDefaultFolders.olFolderDeletedItems);
var idList = (from MailItem item in binFolder.Items select item.EntryID).ToList();
DeleteFromId(idList);
}
// It gets a list of emails ID and remove it from the outlook
private void DeleteFromId(List<string> idList)
{
foreach (var id in idList)
{
var item = (MailItem)mapiNameSpace.GetItemFromID(id);
item.Delete();
}
}
谢谢
如果错误发生在行中
var idList = (from MailItem item in binFolder.Items select item.EntryID).ToList();
它可能有几个原因:
- 并非文件夹中的所有项目都属于
MailItem
类型。 - 访问
EntryID
属性时可能会引发异常。
可以通过转换 Linq 语句来防止/处理此类问题,如下所示:
var idList = new List<string>();
foreach (var item in binFolder.Items.OfType<MailItem>())
{
try
{
idList.Add(item.EntryID);
}
catch (COMException ex)
{
Trace.WriteLine(ex);
}
}
这修复了代码中的错误,但以下内容很可能会运行得更快,因为您不必再次检索每个项目:
var itemsToDelete = binFolder.Items.OfType<dynamic>().ToList();
foreach (var item in itemsToDelete)
{
try
{
item.Delete();
}
catch (Exception ex)
{
Trace.WriteLine(ex);
}
}