从包含 class 定义的字符串创建动态 class
Creating dynamic class from a string containing the class definition
我有一个存储过程接受 table 名称,然后它读取 table 结构,returns 我读取 table 结构 class 定义在一个字符串中。
例如:
string myString =
"
public class TableName
{
public int Column1 { get; set; }
}
"
是否可以从包含 class 定义的字符串创建 Class/Type?
例如:-
Type type = GenerateType(myString);
我必须将此类型变量传递给我的另一段代码,因此请帮助我从包含 class 定义的字符串创建 class/type。
您可以使用 CSharpCodeProvider 在运行时编译结果,然后使用 Activator - Class 从生成的代码创建对象。
// compile your piece of code to dll file
Microsoft.CSharp.CSharpCodeProvider cSharpCodeProvider = new Microsoft.CSharp.CSharpCodeProvider();
System.CodeDom.Compiler.CompilerParameters compilerParameters = new System.CodeDom.Compiler.CompilerParameters();
compilerParameters.GenerateInMemory = true;
compilerParameters.GenerateExecutable = false;
System.CodeDom.Compiler.CompilerResults cResult = cSharpCodeProvider.CompileAssemblyFromSource(compilerParameters, "using System; namespace Tables { 'put here your class definition' }");
// then load your dll file, get type and object from class
Assembly assembly = cResult.CompiledAssembly;
Type myTableType = assembly.GetType("Tables.Tablename");
var finalResult = Activator.CreateInstance(myTableType);
我有一个存储过程接受 table 名称,然后它读取 table 结构,returns 我读取 table 结构 class 定义在一个字符串中。
例如:
string myString =
"
public class TableName
{
public int Column1 { get; set; }
}
"
是否可以从包含 class 定义的字符串创建 Class/Type? 例如:-
Type type = GenerateType(myString);
我必须将此类型变量传递给我的另一段代码,因此请帮助我从包含 class 定义的字符串创建 class/type。
您可以使用 CSharpCodeProvider 在运行时编译结果,然后使用 Activator - Class 从生成的代码创建对象。
// compile your piece of code to dll file
Microsoft.CSharp.CSharpCodeProvider cSharpCodeProvider = new Microsoft.CSharp.CSharpCodeProvider();
System.CodeDom.Compiler.CompilerParameters compilerParameters = new System.CodeDom.Compiler.CompilerParameters();
compilerParameters.GenerateInMemory = true;
compilerParameters.GenerateExecutable = false;
System.CodeDom.Compiler.CompilerResults cResult = cSharpCodeProvider.CompileAssemblyFromSource(compilerParameters, "using System; namespace Tables { 'put here your class definition' }");
// then load your dll file, get type and object from class
Assembly assembly = cResult.CompiledAssembly;
Type myTableType = assembly.GetType("Tables.Tablename");
var finalResult = Activator.CreateInstance(myTableType);