不了解Type.IsAssignableFrom

spe*_*der 12 c# types

int i=1;
long longOne=i; //assignment works fine
//...but
bool canAssign=(typeof(long).IsAssignableFrom(typeof(int))); //false
Run Code Online (Sandbox Code Playgroud)

为什么是canAssign假的?

Mat*_*les 20

看一下Reflector中的方法,看起来这个方法用于确定继承而不是兼容性.

例如,如果您有一个实现接口的类,那么如果您这样做,该方法将返回true (typeof(interface).IsAssignableFrom(typeof(class))


Bol*_*ock 11

inta 分配给a时long,所有发生的都是隐式转换.longOne是一个实际的long(好像你初始化它1L),而不是int伪装成一个long,如果你得到漂移.

也就是说,int(或Int32)和long(或Int64)在继承或实现方面没有关系; 它们恰好是可转换的,因为它们都是整数类型.


Guf*_*ffa 5

IsAssignableFrom返回true,如果类型相同,或者如果式工具或继承它。

Along不继承int,因此该方法返回 false。

当您int为 along赋值时,它不仅仅是一个赋值。编译器还会自动添加代码以将int值转换为long值。