asp.net 为什么这个简单的bool赋值会产生错误

zc0qhyus  于 2023-01-06  发布在  .NET
关注(0)|答案(1)|浏览(113)

好吧,我有这个代码-(控制台应用程序),但它失败的winforms,asp.net,或任何东西。

DataTable rstData = new DataTable();
        rstData.Columns.Add("VisitDate", typeof(DateTime));
        DataRow OneRow = rstData.NewRow();
        OneRow["VisitDate"] = DBNull.Value;
        rstData.Rows.Add(OneRow);

        DateTime? dtTest = (DateTime?)rstData.Rows[0]["VisitDate"] as DateTime?;

        bool testbvalue = true;

        Console.WriteLine(testbvalue.ToString());
        Console.WriteLine("Hit enter to continue");

        Console.ReadLine();

当我运行上面的程序时,我得到这个错误:

前面代码中没有触发任何错误,但是简单的bool赋值失败。
如果我注解掉代码的第一部分,就像这样说:

//DataTable rstData = new DataTable();
        //rstData.Columns.Add("VisitDate", typeof(DateTime));
        //DataRow OneRow = rstData.NewRow();
        //OneRow["VisitDate"] = DBNull.Value;
        //rstData.Rows.Add(OneRow);

        //DateTime? dtTest = (DateTime?)rstData.Rows[0]["VisitDate"] as DateTime?;

        bool testbvalue = true;

        Console.WriteLine(testbvalue.ToString());
        Console.WriteLine("Hit enter to continue");

        Console.ReadLine();

那么代码当然是有效的。
Edit:堆栈跟踪显示如下:

StackTrace  
"   at CSharpConsole.Program.Main(String[] args) in
C:\\Users\\Kalla\\source\\repos\\CSharpConsole\\Program.cs:line 20" string

因此,堆栈跟踪显示了正确的行-调试器和VS突出显示了错误的行。

yyyllmsg

yyyllmsg1#

布尔赋值语句很好。
上一行产生错误,即

DateTime? dtTest = (DateTime?)rstData.Rows[0]["VisitDate"] as DateTime?;

由于某种原因,调试器在引发异常后在错误的行上暂停。
如果注解掉带有bool赋值的行(以及相关的控制台输出),您将看到异常报告在Console.WriteLine("Hit enter to continue")行。
DateTime赋值行上的直接类型转换(使用括号进行类型转换)是不必要的,实际上,如果将其删除,代码运行良好:

DateTime? dtTest = rstData.Rows[0]["VisitDate"] as DateTime?;

但是,我仍然不确定为什么调试器在错误的行上暂停。

相关问题