无法从字符串C#创建对象

时间:2014-10-21 14:58:47

标签: c# asp.net visual-studio iis

我在这个网站上扫描了很多主题,搜索了互联网,并对代码进行了实验,但没有任何工作。大多数人使用的是单独的项目或程序集,我不是,它是一个存在于同一项目和相同名称空间中的自定义类。如果我通过硬编码手动构建对象,它工作正常,但我不想这样做。

这是一个C#ASPX项目,我正在从Visual Studio上调试IIS(所以这可能是问题吗?)。

Type type = Type.GetType("<namespace>."+classname);
Object obj = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod(function);
response = (<cast object>)(methodInfo.Invoke(obj, null));

我的目标是变量代码,我可以编写将动态实例化的插件。 Type.GetType始终返回null。

在几乎所有情况下,type返回null或当我用其他代码将其切换时,我会得到其他错误,因为没有找到文件或程序集,而其他错误就像这个类只是不存在...

如何能够在字符串中动态构建对象,我该怎么做?假设我有一个名为“Foobar”的课程,我想这样做,

string classname = "Foobar";
Object foobar = new classname(); //easy in PHP, nightmare in C#

任何帮助都会很棒,谢谢。在你告诉我只是引用另一篇文章之前,我已经引用了很多但仍然没有成功,所以如果它不是代码而不是我在IIS上的浏览器中调试的方式呢?

5 个答案:

答案 0 :(得分:3)

Type.GetType(String)接受程序集限定的类型名称。

请参阅Type.AssemblyQualifiedName Property

答案 1 :(得分:3)

您需要从程序集中获取类型:

typeof(SomeTypeInAssembly).Assembly.GetType("Namespace.Type")

答案 2 :(得分:1)

如果它与您说的当前对象位于相同的命名空间和程序集中,您应该能够执行以下操作来获取所需的Type

Type type = Type.GetType(this.GetType().Namespace + "." + classname);

其余的应该像你一样工作。

答案 3 :(得分:0)

感谢您提出的建议,我在本网站上发现的建议和其他帖子中最终得到了最终代码。

string fullname = string.Format("{0}.{1}", this.GetType().Namespace, classname);
Type type = Type.GetType(fullname,true);
Baseclass class = (BaseClass)Activator.CreateInstance(type,<parameter1>,...);
MethodInfo methodInfo = type.GetMethod("<method>");
methodInfo.Invoke(class, null);

如果要处理返回类型,可以存储返回(可能需要转换)。如果他们遇到像我这样的问题,希望这可以帮助他人。

感谢Rhumborl的帖子,我想这是我最初尝试调用Type.GetType函数的一个问题。

答案 4 :(得分:-3)

String是一个本机类型,自动从对象继承,因为每个类型(aka类)都是一个对象,所以不需要做这样的事情