c# - 为什么 IS 运算符在 false 时输入 IF 语句?

标签 c# winforms visual-studio-2015

我最想在这里遗漏一些东西,
在我制作的调试 session 图像中看到。

(items[i] is MailItem) 根据调试器为 FALSE,但它仍然进入 if 语句。
我在这里错过了什么?
.

enter image description here

作为引用,这里是这个方法的完整代码

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

最佳答案

This所以答案解释了为什么你看到 IF 条件得到通过,即使它里面的表达式是 false。显然这是调试器和多线程的问题。此外,它还建议使用 lock 来防止此问题的解决方法。希望对您有所帮助。

关于c# - 为什么 IS 运算符在 false 时输入 IF 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55964184/

相关文章:

c# - OnFormClosing 和 e.CloseReason

.net - Visual Studio 2012 winform 设计器非常慢

c# - 我的 Lazy<> 值工厂中的 InvalidOperationException

c# - 使用 Entity Framework 的 sql IN 子句的动态 linq 查询表达式树

c - 如何在同一个项目中混合c和c++表单应用程序?

qt - CMake 3.9现在可以在Visual Studio中创建“自动生成”项目吗?

visual-studio-2015 - 如何在 MVC 6 应用程序中启用 SSL?

c# - 在 C# 中搜索 ASCII 文件以获取简单关键字的最快方法?

c# - 为什么适配器不工作?

c++ - 确定用户指定的点是否在二维多边形内