无法强制转换类型为'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"类型。

无法强制转换类型为'System.DateTime'键入'System.String'

显示_nullableDateTimePicker1的可空类型实例的类型为DateTime,它不是字符串;您需要与DateTime进行比较或将其转换为字符串。

所以,在最简单的意义上:

_nullableDateTimePicker1.Value.ToString() != string.Empty

然而,要注意不检查HasValue的危险,因为如果Valuenull,这将导致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。