为什么IsAssignableFrom()不适用于int和double?

这是假的: typeof(double).IsAssignableFrom(typeof(int))

这是假的: typeof(int).IsAssignableFrom(typeof(double))

但这有效:

  double a = 1.0; int b = 1; a = b; 

显然, double 可以int赋值,但框架IsAssignableFrom()会错误。

为什么? 或者这是由.NET和double的特殊性质引起的.NET中的一个错误,它没有inheritance关系但是可以分配(在一个方向上)?

C#提供从intdouble的隐式转换。 这是一个语言决定,而不是.NET会为你做的事情……所以从.NET的角度来看, double 不能int赋值。

(作为为什么这是特定于语言的示例,F# 不会像这样执行隐式转换 – 您需要明确指定转换。)

值得查看Type.IsAssignableFrom的文档(为了便于阅读,略微编辑):

如果c和当前Type表示相同的类型,或者当前Type在c的inheritance层次结构中,或者当前Type是c实现的接口,或者c是generics类型参数和当前类型,则返回true代表c的约束之一。 如果这些条件都不为真,或者c为null,则返回false。

现在将它应用于doubleint ,你会看到它应该返回false。