Gui*_*doG 5 c# winforms visual-studio-2015
我最想念的是这里的内容,
请参见我调试会话的图像。
(items[i] is MailItem)根据调试器为FALSE,但仍输入该if语句。
我在这里想念什么?
。
供参考,这是此方法的完整代码
private MailItem GetMailBySubject(DateTime dateReceived, string subject)
{
MailItem Result = null;
Microsoft.Office.Interop.Outlook.Application OutlookIns = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.NameSpace olNamespace = OutlookIns.GetNamespace("MAPI");
MAPIFolder myInbox = olNamespace.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
Items items = myInbox.Items;
int count = items.Count;
MailItem mail = null;
int i = 1; //DO NOT START ON 0
while ((i < count) && (Result == null))
{
if (items[i] is MailItem)
{
mail = (MailItem)items[i];
if ((mail.ReceivedTime.ToString("yyyyMMdd hh:mm:ss") == dateReceived.ToString("yyyyMMdd hh:mm:ss")) && (mail.Subject == subject))
{
Result = mail;
}
}
i++;
}
return Result;
}
Run Code Online (Sandbox Code Playgroud)
我使用Wai Ha Lee 提供的链接做了一个解决方法。但我不得不改变它,因为测试一个项目是否为 MailItem 仍然表现得很奇怪。
因此,我首先将这些项目复制到一个单独的列表中,并确保该列表中只有 MailItem 类型的项目。
我过滤这个问题的唯一方法是使用try...catch,我仍然想要一个更好的方法,并且我仍然很好奇为什么测试的if (items[i] is MailItem)行为如此奇怪。
List<MailItem> ReceivedEmail = new List<MailItem>();
foreach (var testMail in items)
{
try
{
ReceivedEmail.Add((MailItem)testMail);
}
catch (System.Exception ex)
{
;
}
}
Run Code Online (Sandbox Code Playgroud)
此后,我可以使用该列表ReceivedEmail,而无需检查 MailItem。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |