在 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# 的新功能、类型架构的其他方面)时才有效。
我知道我可以像这样轻松地比较两种变量类型:
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# 的新功能、类型架构的其他方面)时才有效。