无法强制转换类型为'System.DateTime'键入'System.String'
本文关键字:System DateTime String 键入 转换 类型 | 更新日期: 2023-09-27 18:10:48
得到一个让我难住的错误。我假设这是一些简单的东西,但似乎不能弄清楚,这是导致错误的代码:
if ((string) _nullableDateTimePicker1.Value != string.Empty && _nullableDateTimePicker1.Value != null) {
_nullableDateTimePicker1.Value = null;
}
当点击我的windows窗体中的搜索按钮时,我得到的结果是:
无法强制转换"System"类型的对象。"DateTime"到"System.String"类型。
显示_nullableDateTimePicker1
的可空类型实例的类型为DateTime
,它不是字符串;您需要与DateTime
进行比较或将其转换为字符串。
所以,在最简单的意义上:
_nullableDateTimePicker1.Value.ToString() != string.Empty
然而,要注意不检查HasValue
的危险,因为如果Value
是null
,这将导致NullReferenceException
;所以,你的支票有点倒了。
即使这样,如果不是 null
,你会得到一个DateTime.MinValue
,所以ToString
不会返回一个空字符串。因此,检查null
上的可空的东西,如果不是null
,比较DateTime.MinValue
(除非有一个特殊的在你的代码中,这意味着它可能有一个不同的 '默认'。
if ((string) _nullableDateTimePicker1.Value .....
可能,_nullableDateTimePicker1.Value
返回一个DateTime
。正如消息所解释的那样,您不能直接将DateTime
转换为string
。
在这部分(string) _nullableDateTimePicker1.Value != string.Empty
中,您试图将值转换为字符串。但是Value
就是DateTime
。第二部分就足够了
(string) _nullableDateTimePicker1.Value
当_nullableDateTimePicker1为空时,抛出异常。
当尝试检查value是否为null时,不要使用(string)
这段代码应该可以工作了:
if (_nullableDateTimePicker1.Value != null && Convert.ToString(_nullableDateTimePicker1.Value) != string.Empty) {
_nullableDateTimePicker1.Value = null;
}
看起来你的_nullableDateTimePicker1
对象是Nullable<DateTime>
(DateTime?
),在这种情况下,你得到这个错误,因为你不能将它转换为字符串。
(string) _nullableDateTimePicker1.Value
看起来你只是想确保它有一个有效的DateTime,在这种情况下你只需要做null检查。在不知道你到底想做什么的情况下,这是我的建议。
DateTimePicker。值返回日期时间类型,不能将其强制转换为字符串,需要将其转换为字符串。
string dateTime = _nullableDateTimePicker1.Value.ToString();
所以你的代码将是:
string dateTime = _nullableDateTimePicker1.Value.ToString();
if (!string.IsNullOrEmpty(dateTime))
{
dateTime = null;
}
我不确定是否将DateTimePicker值设置为null。