2013-08-20 3 views
1

Я наткнулся на проблему, когда метод сортировки таблицы элементов Outlook не дает желаемых результатов - несмотря на восходящий или нисходящий метод GetLast() всегда возвращает тот же элемент электронной почты. Код выглядит следующим образом:Outlook Interop C# sort items not working

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); 

Который, похоже, не работает, либо ... Любые мысли оценили!

ответ

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 заключается в том, чтобы всегда назначать промежуточные элементы объектов своей локальной переменной. Это особенно важно для их последующего выпуска.

+0

спасибо. У вас есть скобки по объекту Subject в последней строке, возможно, захотите удалить их, чтобы не запутать других. –

+0

А, хорошее место - не знаю, откуда это взялось! –