使用简单的类名从Assembly加载Type

Sha*_*ler 0 c# reflection

我尝试通过反射加载一个类型

我成功找到了包含类型的程序集:

 var assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(t => t.GetTypes().Any(g => g.Name == "MyClass"));
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从程序集中加载类型时:

Type t = assembly.GetType("MyClass");
Run Code Online (Sandbox Code Playgroud)

然后t是null,我不想使用完整的限定名称加载类型,只是类名.

小智 7

如果您不想使用完全符合条件的名称,则需要通过LINQ进行搜索并手动处理案例,其中找到了多个类:

var types = assembly.GetTypes().Where(type => type.Name == "MyClass");
var firstType = types.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

记住/教训:程序集中可能有多个具有相同名称的类(具有不同名称空间的类).