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

标签 c# outlook interop ms-office

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

相关文章:

c# - WinRT 上 Windows.Foundation.Size.Width/.Height 中的 System.Double 类型

html - 如何修复 Outlook 2016 中的 HTML 格式

即使退出后,Excel 进程仍在运行

c# - 如何获取word文档封面的名字?

c# - 在 StackExchange.Redis 中执行搜索

c# - WPF Datagrid 数据绑定(bind)到具有静态属性的类和包含动态属性值条目的字典

c# - 容易吗?在 C# 中使用变量访问对象的属性

css - 在 outlook 上隐藏移动表格

.net - 是否可以在 .Net Windows 表单中托管 Microsoft Access 表单?

c# - 从 C++ native 插件更新 float 组