C#Activator.CreateInstance错误

时间:2013-11-14 14:08:06

标签: c# runtimeexception

主要班级......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1{
    class Program{
        static void Main(string[] args){
            string className = "Demo";
            string namespaceName = "ConsoleApplication1";
            var myObj = Activator.CreateInstance(namespaceName, className);
            Console.Read();
        }
    }
}

其他班级......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1{
    class Demo{
        public void printClassName() {
            Console.WriteLine("Demo");
        }
    }
}

这个简单的程序在

处有运行时错误

var myObj = Activator.CreateInstance(namespaceName, className);行。

System.TypeLoadException {"Could not load type 'Demo' from assembly 'ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.":"Demo"}

请帮我解决这个错误!。

1 个答案:

答案 0 :(得分:5)

Activator.CreateInstance(string, string)没有按照您的想法行事。

第一个参数是程序集名称。第二个参数是完全限定的类型名称。

所以你应该:

string className = "ConsoleApplication1.Demo";
string assemblyName = "ConsoleApplication1";
var myObj = Activator.CreateInstance(assemblyName, className);

(假设它被编译成一个名为ConsoleApplication1的程序集。)

但是,如果您能够以不同的方式处理Assembly,则可以使用Assembly.GetType(string)然后使用Activator.CreateInstance(Type)