为什么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#提供从int
到double
的隐式转换。 这是一个语言决定,而不是.NET会为你做的事情……所以从.NET的角度来看, double
不能从int
赋值。
(作为为什么这是特定于语言的示例,F# 不会像这样执行隐式转换 – 您需要明确指定转换。)
值得查看Type.IsAssignableFrom
的文档(为了便于阅读,略微编辑):
如果c和当前Type表示相同的类型,或者当前Type在c的inheritance层次结构中,或者当前Type是c实现的接口,或者c是generics类型参数和当前类型,则返回true代表c的约束之一。 如果这些条件都不为真,或者c为null,则返回false。
现在将它应用于double
和int
,你会看到它应该返回false。