Buc*_*uck 2 c# casting typechecking
我错过了什么?我没有在stackoverflow上看到答案,但可能错过了它.对于这种情况,似乎"是"运算符应该工作(即评估为真)
short j = 1;
int k = 2;
if (j is int)
Console.WriteLine("all values of j will fit into k");
else
Console.WriteLine("all values of j will not fit into k");
Run Code Online (Sandbox Code Playgroud)
我尝试使int和short nullable也没有用.条件成立的基本原理是short的所有值都适合int类型的变量(基于结果可能是错误的 - 即"If(j is in)"的计算结果为false.谢谢
条件成立的基本原理是所有的值
short都适合类型的变量int.
你拿着这本书的平装本The Hobbit,有人问你"那是你拿着电影吗?" 你说是的,因为有一部电影是由这本书制成的吗?或者你说"不,我拿着一本平装书,一本书不是电影." ?
只是因为有一个对应于每个short的int不会使short成为一个int.该is运营商告诉你,你手上有东西是否是特定类型的,故名"的is经营者".它并没有告诉你是否有不同类型的东西恰好与你手头的东西相对应.
is 意思是"源于",大致.
因此,以下将返回true.
j is short
j is object
k is int
k is object
Run Code Online (Sandbox Code Playgroud)
以下将返回false.
j is int
k is short
Run Code Online (Sandbox Code Playgroud)
由于int和short彼此反正不继承.
为了回答"X是否适合Y"的问题,我不相信有一种内置的机制,因为通常你需要将答案烘焙到你的逻辑中.
如果您只是想知道答案,通常C#非常擅长提供与您的定义匹配的隐式转换,is否则只提供显式转换.
例如,你可以隐式地将inta 转换为doublenot,因为它们是同一个东西,但因为每个int都有一个完美的double表示.