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
来检查当前程序集,但我不知道我需要使用的确切方法
所以我的问题有两个:
try catch
块处理它吗如果可以的话,我认为这可能是避免异常的最好方法,至少可能会使代码更难阅读。丹尼尔·鲍威尔的答案正是我完成这项工作所需要的 最后,这是我用来实现我需要做的事情的代码的粗略翻译:
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,这就是我想要的。接受这个作为我的答案,但我会发布我最后做了什么,这样任何未来的观众都可以看到最终结果。谢谢丹尼尔,这就是我想要的。接受这一点作为我的答案,但我将公布我最终的做法,以便任何未来的观众都能看到最终结果。