当操作“不受支持”时,为什么会有Convert.ToInt32(DateTime)方法?

时间:2014-08-20 20:57:37

标签: c# datetime converter

记录Convert.ToInt32(DateTime)方法总是抛出InvalidCastException因为"不支持此转换。"

如果不支持,为什么它甚至存在?没有那个功能会不会更有意义呢?

2 个答案:

答案 0 :(得分:4)

查看Convert实现,您可以看到它依赖于正在转换的类型实现的IConvertible接口。 IConvertible界面会强制某种类型实施所有转换方法,并且可以按照您的描述进行操作:

  

如果没有有意义的公共语言运行时类型转换,那么特定的接口方法实现将抛出InvalidCastException

因此,Convert可能中存在相关方法,因为所有IConvertible都必须使用此方法:

public static int ToInt32(DateTime value)
{
    return ((IConvertible)value).ToInt32(null);
}

因此,与其他人所说的类似,似乎与IConvertible界面和完整性保持一致。甚至可能会生成Convert的实施,因为它只依赖于IConvertible

答案 1 :(得分:3)

我之前对代码生成的预感是错误的。它实际上比这简单得多:DateTimeIConvertible接口的几乎所有实现都抛出InvalidCastException。当您在此处看到Convert.ToXXX()时,始终会调用这些调用:

Convert.ToInt64

public static long ToInt64(DateTime value)
{
    return ((IConvertible)value).ToInt64(null);
}

底线? Microsoft希望在IConvertible中实现DateTime接口,但不希望为除ToDateTimeToStringToType之外的任何转换提供实现。