Outlook Interop c#排序项目不起作用

本文关键字:项目 不起作用 排序 Interop Outlook | 更新日期: 2023-09-27 18:28:24

我偶然发现了一个问题,Outlook项目表排序方法不能给出所需的结果——尽管方法GetLast()是升序或降序,但它总是返回相同的电子邮件项目。代码如下:

Application olApp = new Application();
NameSpace olNS = olApp.GetNamespace("MAPI");
MAPIFolder oFolder = olNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
Explorer oExp = oFolder.GetExplorer(false);
//olNS.Logon( false, true);
result = new IOActionResult(null);
oFolder.Items.Sort("[ReceivedTime]");
var subject = oFolder.Items.GetLast().Subject;

我尝试指定以下内容:

oFolder.Items.Sort("[ReceivedTime]", true);
oFolder.Items.Sort("[ReceivedTime]", false);
oFolder.Items.Sort("[ReceivedTime]", OlSortOrder.olAscending);
oFolder.Items.Sort("[ReceivedTime]", OlSortOrder.olDescending);

这似乎也不起作用。。。感谢您的想法!

Outlook Interop c#排序项目不起作用

在最后一行;

var subject = oFolder.Items.GetLast().Subject;

您将从Outlook返回一个新的Items对象,因此您的排序实际上是在您不再引用的实例上执行的。

将代码更改为如下所示;

Application  olApp = new Application();
NameSpace olNS = olApp.GetNamespace("MAPI");
MAPIFolder oFolder = olNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
Items items = oFolder.Items;
items.Sort("[ReceivedTime]");
var subject = items.GetLast().Subject;

在针对Outlook进行开发时,一个很好的经验法则是始终将对象的中间成员分配给它们自己的局部变量。这与以后发布它们特别相关。