在 C# 中使用 "is" 运算符比较两个变量类型

Using "is" operator to compare two variable types in C#

我知道我可以像这样轻松地比较两种变量类型:

i.GetType() == i2.GetType())

此外,这种比较工作正常:

int i = 0;
if(i is int){}

那么,为什么这样的东西不起作用,我收到错误消息“i2 正试图用作类型”?

int i = 0;
int i2 = 0;
if(i is i2.GetType()){}

同理,这样的构造不行:

typeof(str.GetType())

编译时类型(使用类型名称,如int)和运行时变量之间存在差异它包含有关类型的信息(类型System.Type的变量,例如i2.GetType()返回的内容)。你好像混淆了这两者。

如果您想查看某个变量是否属于特定类型,并且您在编译时知道该类型是什么,请使用is.

if (i is int)

如果你在编译时不知道比较类型,而是在运行时,你需要使用GetType.

仅straight-up相等比较:

if (i.GetType() == i2.GetType())

并用于测试 i inherits/implements 来自 i2 是什么

i2.GetType().IsAssignableFrom(i.GetType())

is 仅当您在编译时知道类型(以及 C# 的新功能、类型架构的其他方面)时才有效。