【问题标题】:Unable to cast ObjectParameter to Nullable DateTime?无法将 ObjectParameter 转换为 Nullable DateTime?
【发布时间】:2015-12-28 08:48:05
【问题描述】:
var OverDate = new ObjectParameter("OverDate",(DateTime)DateTime.Now);
DateTime? convertedDate = (DateTime?) OverDate.Value;

当我提供convertedDate 作为DateTime? 类型的输入参数时,它能够构建但抛出运行时异常

当我得到以下异常时,我可以知道转换的哪一部分是错误的

无法转换类型为“System.Data.Objects.ObjectParameter”的对象 输入“System.IConvertible”

【问题讨论】:

  • 您的代码工作正常(.net 4.5)
  • 当我提供convertedDate 作为DateTime? 类型的输入参数时,它能够构建但抛出运行时异常
  • 也许你应该检查Nullable<DateTime>
  • 不,我的意思是它确实有效。 img.leprosorium.com/2480316
  • var cast = (IConvertible)OverDate.Value 也适用于上述情况。所以这个问题无法重现问题。我们既可以将框从object 向下转换为IConvertible,也可以将其拆箱为DateTime,也可以在拆箱后包装为DateTime?。一定是(A)您在ObjectParameter 上忘记了.Value,或者(B)您将一个ObjectParameter 包裹在另一个ObjectParameter 中。

标签: c# datetime nullable


【解决方案1】:

使用

DateTime? convertedDate = OverDate.Value as DateTime?;

【讨论】:

  • 在 4.0 上试过,对我来说效果很好。尝试在新项目中使用这两行代码,看看会发生什么。
【解决方案2】:

我没有收到以下代码的错误。尝试使用下面的代码创建新项目。有时,当程序中发生异常并且您没有异常处理程序(try/catch)时,代码会跳过给出令人困惑的错误消息。您可能在项目的其他地方有异常。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//add reference for System.Data.Entity
using System.Data.Objects;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var OverDate = new ObjectParameter("OverDate", (DateTime)DateTime.Now);
            DateTime? convertedDate = (DateTime?)OverDate.Value;
        }
    }
}
​

【讨论】:

  • @jdweng:我确实有 try/catch 异常处理程序,它是显示我提到的错误的 catch 部分
  • 如果你在另一段代码中没有异常句柄,Net库会跳转到另一段有异常句柄的代码。当发生异常时,Net 库向上移动执行堆栈,直到找到第一个异常处理程序。 VS 编译器在调用 main() 之前放置了一个异常处理程序,因此总是有一个默认的异常处理程序来防止蓝屏故障。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
相关资源
最近更新 更多