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