这是假的:typeof(double).IsAssignableFrom(typeof(int))
这是假的:typeof(int).IsAssignableFrom(typeof(double))
但这有效:
double a = 1.0;
int b = 1;
a = b;
显然double
可以从int
分配,但框架IsAssignableFrom()
会出错。
为什么呢?或者这是.NET中由int和double的特殊性质引起的错误,它没有继承关系但是可以分配(在一个方向上)?
答案 0 :(得分:23)
C#提供从int
到double
的隐式转换。这是语言的决定,而不是.NET会为你做的事情......所以从.NET的角度来看,double
不是可以从int
。
(作为为什么这是特定于语言的原因,F#不会为此执行隐式转换 - 您需要明确指定转换。)
值得查看Type.IsAssignableFrom
的文档(为了便于阅读而略微编辑):
如果c和当前Type表示相同类型,或者当前Type在c的继承层次结构中,或者当前Type是c实现的接口,或者c是泛型类型参数,则返回true当前Type表示c的约束之一。如果这些条件都不为真,或者c为null,则返回false。
现在将其应用于double
和int
,您会看到应该返回false。