0

我发送datetime to a function如下:

MyFunction((DateTime)MethodDateTime);

而 myMethodDateTimeDateTime数据类型并包含null值。

因此,在执行时,它给了我错误nullable object must have a value

我的功能是这样的:

MyFunction(DateTime abc)
{
    // Statements
}

因此,在冲浪之后,我可以理解我将 null 强制为 datetime。但这是我的问题,有时我会得到空值作为日期时间,那么如何处理呢?

另外,当我datetime直接通过时,它会说

  1. The best overloaded method match for 'Big.Classes.QStr.MyFunction(System.DateTime)' has some invalid arguments
  2. cannot convert from 'System.DateTime?' to 'System.DateTime'

所以正因为如此我在做(DateTime)MethodDateTime

我的日期时间的声明和初始化是DateTime? MethodDateTime = null;

编辑:

我所做的主要声明是:

    /// <summary>
    /// Get's or set's the MethodDateTime. If no MethodDateTime is there, this
    /// attribute is null.
    /// </summary>
    DateTime? MethodDateTime
    {
        get;
        set;
    }
4

6 回答 6

2

您可以简单地更改方法签名以接收可为空的 DateTime

MyFunction(DateTime? abc)
{
    if(abc.HasValue)
    {
        // your previous code
    }
    else
    {
       // Handle the NULL case
    }
}

但是,如果您真的不想更改以前的代码,您可以简单地添加另一个具有相同名称但日期时间可为空的方法

MyFunction(DateTime? abc)
{
     Console.WriteLine("NULLABLE version called");
}

MyFunction(DateTime abc)
{
     Console.WriteLine("NOT NULLABLE version called");
}

这样,框架将调用正确的方法来查看传递的变量的数据类型

于 2013-05-23T13:58:32.057 回答
1

您需要使用类型参数来声明您的函数,DateTime?而不是DateTime使用nullable.

MyFunction(DateTime? abc)
{
   // Statements
}

DateTime如果您需要处理可能的空值,这是唯一的工作方式。对于可为空的类型,您具有属性HasValue(更喜欢检查null)和Value,例如:

MyFunction(DateTime? abc)
{
   if(abc.HasValue)
   {
     DateTime myDate = abc.Value;
   } else {
     // abc is null
   }
}
于 2013-05-23T13:56:25.570 回答
0

您可以使用可为空的日期时间DateTime 吗?

于 2013-05-23T13:58:11.560 回答
0

如果我理解正确,您不想将 DateTime 作为可空对象发送到 MyFunction。然后你必须首先检查它是否为空,然后发送值。

if(MethodDateTime.HasValue)
{
   MyFunction(MethodDateTime.Value);
}
else
{
   // handle this case somehow
}
于 2013-05-23T13:59:21.783 回答
0

DateTime值不能成立nullNullable<DateTime>(与 相同DateTime?)本质上是一个包装类,它允许您存储 aValueType或 null 值。

您需要测试您的日期时间吗?价值:

if(MethodDateTime == null)
    MyFunction(DateTime.MinValue) //Pass in a sentinal value

或更改您的方法以允许可空值:

MyFunction(DateTime? abc)
{
    ....
于 2013-05-23T14:00:54.480 回答
0

“而我的 MethodDateTime 是 DateTime 数据类型并且包含空值。”

不,它 isDateTime?和 not DateTime,它是 The Error 的缩写,System.Nullable<DateTime>当你将它从DateTime?to 转换时发生DateTime,它没有任何价值。

if( MethodDateTime.HasValue)
{
    MyFunction(MethodDateTime.Value);
}
else
{
    //Handle error
}
于 2013-05-23T14:01:14.213 回答