为List添加排序的函数处理并列排名情况(上篇)
2009-05-21 08:30:02 来源:WEB开发网类型名称有了 还需要属性名称和返回值 .. 就可以动态创建类型类. . 属性和返回值用什么存放
我首先想到的就是Dictionary<string,string> key 当属性名称 value当返回类型..
创建类型还需要导入命名空间. 程序集 所有就就有了下面的这个方法
/// <summary>
/// 动态创建一个类型的实例
/// </summary>
/// <param name="dictionary">属性名称和属性的返回类型的键值对(属性名称为Key 返回类型为Value)</param>
/// <param name="referencedAssemblies">需要加载的dll</param>
/// <returns></returns>
private static Type DynamicCreateType(Dictionary<string, string> dictionary, string[] referencedAssemblies)
{
//指定编译器的版本
CSharpCodeProvider p = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
//添加引用
CompilerParameters param = new CompilerParameters(referencedAssemblies);
//创建一个随机的类名
string className = "__" + CreateEnglish(10);
StringBuilder classCode = new StringBuilder();
//可以考虑继承 需要主注意 引入 dll 命名空间
classCode.Append("public class ");
classCode.Append(className);
classCode.Append("{");
foreach (var item in dictionary)
{
classCode.Append("public " + item.Value + " " + item.Key + "{ get;set;}");
}
classCode.Append("}");
//编译
CompilerResults rel = p.CompileAssemblyFromSource(param, classCode.ToString());
//获得这个类型并返回
return rel.CompiledAssembly.GetType(className);
}
更多精彩
赞助商链接