我偶然发现了一个问题,即 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);
这似乎也不起作用......任何想法表示赞赏!
最佳答案
在你的最后一行;
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 进行开发时的一个好的经验法则是始终将对象的中间成员分配给它们自己的局部变量。这对于稍后发布它们特别相关。
关于c# - Outlook Interop C# 排序项目不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18337839/