日期时间可以为空的问题

时间:2013-05-23 13:54:32

标签: c# datetime null

我发送datetime to a function,如:

MyFunction((DateTime)MethodDateTime);

我的MethodDateTime属于DateTime数据类型且包含null值。

由于执行此操作,它会给我错误nullable object must have a value

我的职能是:

MyFunction(DateTime abc)
{
    // Statements
}

所以在冲浪之后,我能理解我正在迫使null到datetime。但这是我的问题,有时我得到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'
  3. 因此我正在做(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;
        }
    

6 个答案:

答案 0 :(得分: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");
}

通过这种方式,框架将调用正确的方法来查看传递的变量

的数据类型

答案 1 :(得分: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
   }
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

if(MethodDateTime.HasValue)
{
   MyFunction(MethodDateTime.Value);
}
else
{
   // handle this case somehow
}

答案 4 :(得分:0)

DateTime值无法保留nullNullable<DateTime>(与DateTime?相同)本质上是一个包装类,允许您存储ValueType或空值。

你需要测试你的DateTime吗?值:

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

或更改您的方法以允许nullables:

MyFunction(DateTime? abc)
{
    ....

答案 5 :(得分:0)

  

&#34;而我的MethodDateTime是DateTime数据类型并且包含空值。&#34;

不,它是DateTime?而不是DateTime,它是System.Nullable<DateTime>的缩写,当您将其从DateTime?投射到DateTime时出现错误没有价值。

if( MethodDateTime.HasValue)
{
    MyFunction(MethodDateTime.Value);
}
else
{
    //Handle error
}