C# 检查当前.NET程序集中是否存在类

C# 检查当前.NET程序集中是否存在类,c#,.net,reflection,C#,.net,Reflection,在尝试使用Activator.CreateInstance创建类之前,我希望能够验证当前程序集中是否存在类 目前,我基于从我正在扩展的第三方应用程序检索到的一些元数据构建了一个完全限定的类名。然后使用Activator.CreateInstance创建该类名,并将其转换为公共基类 我正在寻找以下线索: string className = "MyNamespace." + "some_arbitary_class_name"; if (Assembly.ClassExists(className

在尝试使用
Activator.CreateInstance
创建类之前,我希望能够验证当前程序集中是否存在类

目前,我基于从我正在扩展的第三方应用程序检索到的一些元数据构建了一个完全限定的类名。然后使用
Activator.CreateInstance
创建该类名,并将其转换为公共基类

我正在寻找以下线索:

string className = "MyNamespace." + "some_arbitary_class_name";
if (Assembly.ClassExists(className))
{
     // Create the class.
}
目前我有:

 string class_name = "MyNamespace.BaseClassImpl_" + meta_data;
 MyBaseClass baseClass = null;
 try
 {
     baseClass = (BaseClass)Activator.CreateInstance(null, class_name);
 }
 catch (Exception e) { }
 // If base class in null, failed.
我知道我需要使用
System.Reflection
来检查当前程序集,但我不知道我需要使用的确切方法

所以我的问题有两个:

  • 有人能告诉我实现这一点所需的.NETAPI吗
  • 在创建类之前验证类是否存在是一种良好的做法?或者我应该让
    try catch
    块处理它吗
  • 您可以执行一个(“assembly”)并查看它是否返回null,还有一个允许您指定一个参数,即如果类型不存在,是否抛出

    如果可以的话,我认为这可能是避免异常的最好方法,至少可能会使代码更难阅读。

    您可以执行一个(“汇编”)并查看它是否返回null,还有一个允许您指定一个参数,即如果类型不存在,是否抛出


    如果可以的话,我认为这可能是避免异常的最好方法,至少可能会使代码更难阅读。

    丹尼尔·鲍威尔的答案正是我完成这项工作所需要的

    最后,这是我用来实现我需要做的事情的代码的粗略翻译:

    class MyBaseClass
    {   }
    
    class MyBaseClass_impl : MyBaseClass
    {   }
    
    public MyBaseClass CreateFromMetaData(string metaData)
    {
        string className = "MyNamespace.MyBaseClass_" + metaData;
        Type t = System.Reflection.Assembly.GetExecutingAssembly().GetType(className, false);
        if (t != null)
        {
            return (MyBaseClass)Activator.CreateInstance(t);
        }
    
        return null;
    }
    

    接下来,使用
    “impl”
    作为
    CreateFromMetaData
    的参数将返回一个新的
    MyBassClass\u impl
    对象,而任何其他字符串都将返回null。

    丹尼尔·鲍威尔的答案正是我完成此任务所需要的

    最后,这是我用来实现我需要做的事情的代码的粗略翻译:

    class MyBaseClass
    {   }
    
    class MyBaseClass_impl : MyBaseClass
    {   }
    
    public MyBaseClass CreateFromMetaData(string metaData)
    {
        string className = "MyNamespace.MyBaseClass_" + metaData;
        Type t = System.Reflection.Assembly.GetExecutingAssembly().GetType(className, false);
        if (t != null)
        {
            return (MyBaseClass)Activator.CreateInstance(t);
        }
    
        return null;
    }
    

    接下来,使用
    “impl”
    作为
    CreateFromMetaData
    的参数将返回一个新的
    MyBassClass\u impl
    对象,而任何其他字符串将返回null。

    谢谢Daniel,这就是我想要的。接受这个作为我的答案,但我会发布我最后做了什么,这样任何未来的观众都可以看到最终结果。谢谢丹尼尔,这就是我想要的。接受这一点作为我的答案,但我将公布我最终的做法,以便任何未来的观众都能看到最终结果。