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

时间:2011-06-08 07:53:27

标签: c# .net types

这是假的: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的特殊性质引起的错误,它没有继承关系但是可以分配(在一个方向上)?

1 个答案:

答案 0 :(得分:23)

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

(作为为什么这是特定于语言的原因,F#不会为此执行隐式转换 - 您需要明确指定转换。)

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

  

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

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