我发送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
时,它说
The best overloaded method match for 'Big.Classes.QStr.MyFunction(System.DateTime)' has some invalid arguments
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;
}
答案 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
值无法保留null
。 Nullable<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
}