使用Is运算符和值类型C#

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.谢谢

Eri*_*ert 8

条件成立的基本原理是所有的值short都适合类型的变量int.

你拿着这本书的平装本The Hobbit,有人问你"那是你拿着电影吗?" 你说是的,因为有一部电影是由这本书制成的吗?或者你说"不,我拿着一本平装书,一本书不是电影." ?

只是因为有一个对应于每个short的int不会使short成为一个int.该is运营商告诉你,你手上有东西是否特定类型的,故名"的is经营者".它并没有告诉你是否有不同类型的东西恰好与你手头的东西相对应.


Guv*_*nte 6

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)

由于intshort彼此反正不继承.

为了回答"X是否适合Y"的问题,我不相信有一种内置的机制,因为通常你需要将答案烘焙到你的逻辑中.

如果您只是想知道答案,通常C#非常擅长提供与您的定义匹配的隐式转换,is否则只提供显式转换.

例如,你可以隐式地将inta 转换为doublenot,因为它们是同一个东西,但因为每个int都有一个完美的double表示.