C#Activator.CreateInstance错误

1 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

其他课....

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个简单的程序在运行时出现错误

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"}
Run Code Online (Sandbox Code Playgroud)

请帮助我解决此错误!

Jon*_*eet 5

Activator.CreateInstance(string, string) 不按照您的想法去做。

第一个参数是程序集名称。第二个参数是标准类型名称。

因此,您应该具有:

string className = "ConsoleApplication1.Demo";
string assemblyName = "ConsoleApplication1";
var myObj = Activator.CreateInstance(assemblyName, className);
Run Code Online (Sandbox Code Playgroud)

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

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