2

我偶然发现了一个问题,即 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);

这似乎也不起作用......任何想法表示赞赏!

4

1 回答 1

2

在你的最后一行;

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

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

将您的代码更改为如下所示;

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 进行开发时,一个好的经验法则是始终将对象的中间成员分配给它们自己的局部变量。这对于稍后发布它们特别重要。

于 2013-08-20T14:58:28.997 回答