並不是說這是您使用的最佳選擇,但是您可以在運行時編譯自己的類並加載它們。以下是如何將文本編譯爲DLL的示例。
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = false;
parameters.WarningLevel = 3;
parameters.CompilerOptions = "/optimize";
parameters.OutputAssembly = "C:\\test\\test.dll";
parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Core.dll");
parameters.ReferencedAssemblies.Add("System.Data.dll");
parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
parameters.ReferencedAssemblies.Add("System.XML.dll");
parameters.ReferencedAssemblies.Add("System.XML.Linq.dll");
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, _BaseCode.ToArray());
if (results.Errors.Count > 0)
{
LogError(results.Errors[0].ErrorText, "Error Compiling", null, "", ErrorLevel.Critical);
throw new Exception("Error Compiling..");
}
上面的代碼只是我用來編譯代碼的更大方法的一個片段。一些變量不存在等。將它用作基礎並查找正在使用的方法。編譯代碼後,您可以加載DLL並創建一個實例。下面的代碼顯示了一些示例。
System.Reflection.Assembly _A = System.Reflection.Assembly.LoadFile(FileLocation);
return (T)_A.CreateInstance(_ClassName, true, System.Reflection.BindingFlags.CreateInstance, null, Arguments.ToArray(), System.Globalization.CultureInfo.CurrentCulture, null);
你確定你不能使用這樣的類嗎?看起來你想創建一個'List',其中列表的大小是數據庫中日期的數量。 –
Sconibulus
如果我理解正確,那麼你只需要列表日期和他們可以填寫的日期所需的日期數 –
kabaros