如何在 C# 中检查运行时类型

sta*_*age 5 c#

我正在使用该Type.GetType()方法返回给定字符串的类型;但是,我正在努力寻找一种检查类型的方法:

var type = Type.GetType("ConsoleApp2.Class1");

if (type is ConsoleApp2.Class1) // Is never true, and gives a warning to that effect
{

}

switch (type)
{
    case ConsoleApp2.Class1: 
        // Will not compile (Expression of Type cannot be handled by a pattern of type Class1
        break;
}
Run Code Online (Sandbox Code Playgroud)

我尝试了各种组合,但显然我错过了一些东西。我意识到我可以只检查文本,但这感觉很脏。

Hei*_*nzi 6

您需要ConsoleApp2.Class1使用typeof运算符包装以获取 type 的对象Type,该对象可以与您的其他类型对象进行比较。

如果要检查是否完全相等,可以使用Type.Equals==

var type1 = Type.GetType("ConsoleApp2.Class1");
var type2 = typeof(ConsoleApp2.Class1);

if (type1.Equals(type2)) { ... } 
if (type1 == type2) { ... } 
Run Code Online (Sandbox Code Playgroud)

如果要检查相等性或子类型关系(类似于myObject is SomeType),可以使用

if (type1.IsAssignableFrom(type2)) { ... }
Run Code Online (Sandbox Code Playgroud)