Salve a tutti,
stò facendo un test per vedere come linq (con una classe apposita) lavora con Microsoft Outlook.
mi sono imbattuto in una cosa strana.
allora io ho questo codice:
ora succede che, eseguendo il codice, funzioni tutto a regola d'arte (anche se potrei ottimizzarlo di più, ma vabbè, è una prova!)... però quando entro nel for each i il codice è molto lento (diciamo che per farmi vedere 102 elementi ci mette 15 secondi buoni).codice:Dim outlookProvider As New OutlookProvider Dim mails = From mail In outlookProvider.InboxItems Order By mail.SentOnBehalfOfName Select mail Dim sentbehalf = mails.GroupBy(Function(s) s.SentOnBehalfOfName) Dim m As Outlook.MailItem For Each i In sentbehalf Dim k = From ms In mails Where ms.SentOnBehalfOfName = i(0).SentOnBehalfOfName Select ms For iEle As Integer = 0 To k.Count m = k(iEle) If m IsNot Nothing Then Console.WriteLine(m.SentOnBehalfOfName) DestroyObject(m) ' funzione che distrugge l'oggetto COM Next Next outlookProvider = Nothing
decido allora di dimensionare k fuori dal for each, così:
solo che quando il programma esegue "For iEle As Integer = 0 To k.Count", mi viene sollevata un'eccezione:codice:Dim outlookProvider As New OutlookProvider Dim mails = From mail In outlookProvider.InboxItems Order By mail.SentOnBehalfOfName Select mail Dim sentbehalf = mails.GroupBy(Function(s) s.SentOnBehalfOfName) Dim m As Outlook.MailItem Dim k For Each i In sentbehalf k = From ms In mails Where ms.SentOnBehalfOfName = i(0).SentOnBehalfOfName Select ms For iEle As Integer = 0 To k.Count m = k(iEle) If m IsNot Nothing Then Console.WriteLine(m.SentOnBehalfOfName) DestroyObject(m) ' funzione che distrugge l'oggetto COM Next Next outlookProvider = Nothing
Impossibile trovare il membro pubblico 'Count' nel tipo 'WhereSelectEnumerableIterator(Of MailItem,MailItem)'.
volevo capire il motivo di ciò e come posso porvi rimedio.
grazie
Andrea

Rispondi quotando