记录Convert.ToInt32(DateTime)
方法总是抛出InvalidCastException
因为"不支持此转换。"
如果不支持,为什么它甚至存在?没有那个功能会不会更有意义呢?
答案 0 :(得分:4)
查看Convert
实现,您可以看到它依赖于正在转换的类型实现的IConvertible
接口。 IConvertible
界面会强制某种类型实施所有转换方法,并且可以按照您的描述进行操作:
如果没有有意义的公共语言运行时类型转换,那么特定的接口方法实现将抛出
InvalidCastException
。
因此,Convert
类可能中存在相关方法,因为所有IConvertible
都必须使用此方法:
public static int ToInt32(DateTime value)
{
return ((IConvertible)value).ToInt32(null);
}
因此,与其他人所说的类似,似乎与IConvertible
界面和完整性保持一致。甚至可能会生成Convert
的实施,因为它只依赖于IConvertible
。
答案 1 :(得分:3)
我之前对代码生成的预感是错误的。它实际上比这简单得多:DateTime
中IConvertible
接口的几乎所有实现都抛出InvalidCastException
。当您在此处看到Convert.ToXXX()
时,始终会调用这些调用:
public static long ToInt64(DateTime value)
{
return ((IConvertible)value).ToInt64(null);
}
底线? Microsoft希望在IConvertible
中实现DateTime
接口,但不希望为除ToDateTime
,ToString
和ToType
之外的任何转换提供实现。