当操作“不支持”时,为什么会有Convert.ToInt32(DateTime)方法?
本文关键字:不支持 ToInt32 Convert DateTime 方法 操作 为什么 | 更新日期: 2023-09-27 18:18:50
在文档中,Convert.ToInt32(DateTime)
方法总是抛出一个InvalidCastException
,因为"不支持此转换"。
如果它不被支持,为什么它还存在?没有这个函数不是更有意义吗?
查看Convert
实现,您可以看到它依赖于由正在转换的类型实现的IConvertible
接口。IConvertible
接口强制一个类型实现所有转换方法,它的目的是像您所描述的那样工作:
如果没有到公共语言运行时类型的有意义的转换,那么特定的接口方法实现会抛出
InvalidCastException
。
所以问题中的方法存在于Convert
类可能是因为所有IConvertible
都必须有这个方法:
public static int ToInt32(DateTime value)
{
return ((IConvertible)value).ToInt32(null);
}
所以,类似于其他人注意到的,这似乎是与IConvertible
接口的一致性和完整性的问题。甚至可以生成Convert
的实现,因为它只依赖于IConvertible
。
我之前对代码生成的预感是错误的。实际上比这简单得多:DateTime
中几乎所有IConvertible
接口的实现都会抛出一个InvalidCastException
。当你调用Convert.ToXXX()
时,这些调用总是被调用,正如你在这里看到的:
Convert.ToInt64
:
public static long ToInt64(DateTime value)
{
return ((IConvertible)value).ToInt64(null);
}
底线吗?微软希望在DateTime
中实现IConvertible
接口,但不希望提供除ToDateTime
, ToString
和ToType
之外的任何转换的实现。