2015-08-14 2 views
0

Я хочу переименовать Outlook.Selection (который представляет собой коллекцию, которая реализует IEnumerable) или сборку Outlook.Items (которая также косвенно реализует IEnumerable) с помощью метода. Таким образом, параметр метода может быть одним из них.Перечисление коллекций объектов COM через IEnumerable

Я не могу понять, как правильно реализовать параметр для метода. я так далеко в этот момент:

Outlook.Selection items1 = activeExplorer.Selection; 
Outlook.Items items2 = currentFolder.Items; 

// How can i input these as parameter into the method below? 

// The Method to iterate looks like this so far: 
     private void MethodX<T>(IEnumerable<T> items) 
     { 
      foreach (var item in items) 
      { 
       //... 
      } 
     } 

Я не знаю, возможно ли это в любом случае из-за использования COM-объектов ... Может there's другой путь ?!

+0

Если они реализуют 'IEnumerable', то вы можете использовать' '.Cast

+0

Эта работа это не распространяется : MethodX (selection.Cast ()); –

+0

Это похоже на работу: MethodX (selection.Cast ()); Но не знаю, это хорошее решение ?! –

ответ

-1

В ответ на комментарий выше - использовать «для» цикла, попробуйте следующее:

Outlook.Items items2 = currentFolder.Items; 
for (int i = 1; i <= items2.Count; i++) 
{ 
    object item = items2[i]; 
    Outlook.MailItem mailItem = (MailItem)item; 
    if (mailItem != null) //you can have objects other than MailItem 
    { 
    //use mailItem here 
    Marshal.ReleaseComObject(mailItem); 
    } 
    Marshal.ReleaseComObject(item); 
} 
Смежные вопросы